php - 分离 Drupal 模块逻辑和 UI

标签 php drupal drupal-6 drupal-modules

我编写了一个 D6 模块,为用户提供通信、配置参数和测试 3rdparty API 服务的能力。
该模块按预期工作,但我想分离通信器类并将其捆绑为 foo 模块。然后将其余部分(管理页面)打包为 foo-ui 模块。就像 views 和 views-ui 一样。
我不知道这样做的最佳实践/设计模式是什么。有什么想法吗?

最佳答案

据我所知,没有特定的模式,但总有一个问题:

-- Why should I separate my module's logic and UI into multiple modules? Is that really needed?

It's needed, only if you have developed a module which might accept different UIs just like views and simple views. IMO there is no other reason to do so.

好的,假设我们的模块需要 _ui事物。这里我尝试把一个模块的核心功能和它的配置UI分离出来作为例子。看看Unfuddle API module ,这是一个非常小而简单的模块,适合我们的情况。这是 $ tree ./unfuddle_api :

unfuddle_api/
|-- LICENSE.txt
|-- README.txt
|-- unfuddle_api.classes.inc
|-- unfuddle_api.info
|-- unfuddle_api.install
|-- unfuddle_api.module

0 directories, 6 files

阅读它的代码! unfuddle_api.install未安装架构,但实现了 hook_uninstall()使用 variable_del() 删除一些变量在模块卸载。这些变量实际上是将在模块的管理页面中设置的 API 连接参数,您的模块中可能也有一些。
IMO 这是要迁移到 unfuddle_api_ui 的部分模块。

文件unfuddle_api.classes.incunfuddle 的 API 包装类,它以某种方式包装在一个类中的 3rdparty 代码将用于实例化一个对象。
IMO 这应该保留在核心模块中。但是为了设计,我们必须通过删除 variable_get() 来更改构造函数方法。调用和设置传递的参数直接到类属性。我们稍后会在 .module 中添加它们文件。

文件unfuddle_api.module包含主要模块代码,hook_perm() 的实现为 hook_menu() 加一创建管理页面和一个名为 unfuddle_api_create() 的辅助函数这在某种程度上是一个 FactoryUnfuddle 创建对象的助手类编码为 unfuddle_api.classes.inc .
IMO 两个钩子(Hook)实现都应该移植到 _ui模块。也删除了 variable_get() unfuddle_api.classes.inc 的一部分上面讨论过,这里应该加在unfuddle_api_create()功能

所以,作为一个大纲:我们有一个 unfuddle_api充当 Unfuddle 包装器的模块API类。它为我们提供了所有功能,但没有配置 UI。所有配置都应通过 unfuddle_api_create() 设置代码中的模块。
我们还有一个 unfuddle_api_ui依赖unfuddle_api的模块模块,如果启用,将为我们提供 UI 中的核心模块配置。

希望对您有所帮助。

关于php - 分离 Drupal 模块逻辑和 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3913200/

相关文章:

javascript - 获取复选框的值

drupal - 根据域按分类术语过滤 Drupal View (显示在面板中)

php - 为什么 session 不能被取消设置和销毁?

php - SELECT DISTINCT 有什么问题?

drupal - 当安装位于关联的子目录中时,如何从 Drupal 7 中的 URL 中删除/drupal

php - Drupal、mysql服务器设置

Drupal Views 将作者姓名的过滤器显示为下拉列表

php - GD2 扩展是否随 PHP 一起提供?

php - 如何在所有行中显示特定列的数据并将其循环在 <p> 标记上?

drupal - 将自定义字段添加到 Ubercart 发票