我很想知道如何将Drupal模块分解为多个包含文件。链接的一些钩子支持包括组件,如hook_menu,hook_theme等。
一旦我打算简化我的一个复杂模块,它已达到2.3K的线条,其功能集的一半。由于缺乏对包容范围的了解,我必须回滚所有这些步骤。
如果有一些详细信息,请帮助我。
答案 0 :(得分:10)
Nikit said是正确的。
我将添加一些允许定义需要加载的文件的钩子。此类挂钩的示例包括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',
),
// …
);
}
答案 1 :(得分:7)
使用更多文件只是在同一文件中将类似的事物分组在一起,以使其更易于管理。使用的典型文件是
.admin.inc
用于所有管理内容,菜单回调,表单等。.pages.inc
用于前端菜单回调。.theme.inc
用于主题函数,预处理挂钩等。.forms.inc
表示非管理员表单及其处理程序。这更像是一种编码风格。所以这只是为了帮助你自己维护你编写的代码。
答案 2 :(得分:2)
这很简单,只需查看其他大模块(如cck,views等)。主钩子应该在模块中,其他应该在不同的文件中 - 主题,管理页面,其他页面,服务功能等等......