【问题标题】:How to split the code of a module into separated files如何将模块的代码拆分为单独的文件
【发布时间】:2010-08-19 10:40:10
【问题描述】:

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

有一次我计划简化我的一个复杂模块,该模块已经达到 2.3K 行,具有一半的功能集。由于对包含范围缺乏了解,我不得不回滚所有这些步骤。

如果有一些详细信息,请在这方面帮助我。

【问题讨论】:

    标签: drupal drupal-6 drupal-modules


    【解决方案1】:

    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() 在管理页面上。我需要使用传统的requireinclude 语法吗?那么包含多个文件呢?
    • 用于包含 PHP 文件的函数是 module_load_include()。您可以包含一个或多个文件。
    【解决方案2】:

    使用更多文件只是将相似的东西组合在同一个文件中,以使其更易于管理。使用的典型文件是

    • .admin.inc 用于所有管理内容、菜单回调、表单等。
    • .pages.inc 用于前端菜单回调。
    • .theme.inc 用于主题函数、预处理钩子等。
    • .forms.inc 用于非管理员表单及其处理程序。

    这更像是一种编码风格。所以这只是为了帮助自己维护自己编写的代码。

    【讨论】:

    • 这也是为了性能。 .module 文件中的所有函数都会在每次初始化时加载。
    【解决方案3】:

    很简单,只需查看其他大模块(如 cck、views 等)。主要的钩子应该在模块中,其他的应该在不同的文件中——主题、管理页面、其他页面、服务功能等等......

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2017-11-24
      • 1970-01-01
      • 2016-03-17
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多