【发布时间】:2010-08-19 10:40:10
【问题描述】:
我很想知道如何将 Drupal 模块分解为多个包含文件。许多挂钩支持链接包括组件,如 hook_menu、hook_theme 等。
有一次我计划简化我的一个复杂模块,该模块已经达到 2.3K 行,具有一半的功能集。由于对包含范围缺乏了解,我不得不回滚所有这些步骤。
如果有一些详细信息,请在这方面帮助我。
【问题讨论】:
标签: drupal drupal-6 drupal-modules
我很想知道如何将 Drupal 模块分解为多个包含文件。许多挂钩支持链接包括组件,如 hook_menu、hook_theme 等。
有一次我计划简化我的一个复杂模块,该模块已经达到 2.3K 行,具有一半的功能集。由于对包含范围缺乏了解,我不得不回滚所有这些步骤。
如果有一些详细信息,请在这方面帮助我。
【问题讨论】:
标签: drupal drupal-6 drupal-modules
Nikitsaid 是正确的。
我将添加一些允许定义需要加载哪些文件的钩子。此类挂钩的示例是 hook_theme() 和 hook_menu()。
模块不应该无条件加载它需要从函数外部调用module_load_include() 的文件。
function book_menu() {
$items['admin/content/book'] = array(
'title' => 'Books',
'description' => "Manage your site's book outlines.",
'page callback' => 'book_admin_overview',
'access arguments' => array('administer book outlines'),
'file' => 'book.admin.inc',
);
$items['admin/content/book/list'] = array(
'title' => 'List',
'type' => MENU_DEFAULT_LOCAL_TASK,
);
$items['admin/content/book/settings'] = array(
'title' => 'Settings',
'page callback' => 'drupal_get_form',
'page arguments' => array('book_admin_settings'),
'access arguments' => array('administer site configuration'),
'type' => MENU_LOCAL_TASK,
'weight' => 8,
'file' => 'book.admin.inc',
);
// …
}
function user_theme() {
return array(
'user_picture' => array(
'arguments' => array('account' => NULL),
'template' => 'user-picture',
),
'user_profile' => array(
'arguments' => array('account' => NULL),
'template' => 'user-profile',
'file' => 'user.pages.inc',
),
// …
'user_admin_perm' => array(
'arguments' => array('form' => NULL),
'file' => 'user.admin.inc',
),
// …
);
}
【讨论】:
comment_total_count(), comment_today_count() 用于模板,comment_thread() 需要在管理页面和内容页面。 comment_insert() 在内容页面上,comment_remove() 和 comment_edit() 在管理页面上。我需要使用传统的require 或include 语法吗?那么包含多个文件呢?
module_load_include()。您可以包含一个或多个文件。
使用更多文件只是将相似的东西组合在同一个文件中,以使其更易于管理。使用的典型文件是
.admin.inc 用于所有管理内容、菜单回调、表单等。.pages.inc 用于前端菜单回调。.theme.inc 用于主题函数、预处理钩子等。.forms.inc 用于非管理员表单及其处理程序。这更像是一种编码风格。所以这只是为了帮助自己维护自己编写的代码。
【讨论】:
很简单,只需查看其他大模块(如 cck、views 等)。主要的钩子应该在模块中,其他的应该在不同的文件中——主题、管理页面、其他页面、服务功能等等......
【讨论】: