如何将模块的代码拆分为单独的文件

时间:2010-08-19 10:40:10

标签: drupal drupal-6 drupal-modules

我很想知道如何将Drupal模块分解为多个包含文件。链接的一些钩子支持包括组件,如hook_menu,hook_theme等。

一旦我打算简化我的一个复杂模块,它已达到2.3K的线条,其功能集的一半。由于缺乏对包容范围的了解,我必须回滚所有这些步骤。

如果有一些详细信息,请帮助我。

3 个答案:

答案 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等)。主钩子应该在模块中,其他应该在不同的文件中 - 主题,管理页面,其他页面,服务功能等等......