【问题标题】:module_invoke_all not returning all modulesmodule_invoke_all 不返回所有模块
【发布时间】:2011-02-06 21:38:41
【问题描述】:

我正在创建一个模块,它为每种内容类型提供一个单独的节点概览页面。 我的问题在于尝试重新创建节点操作下拉菜单。

在节点模块中,这是通过使用“node_operations”挂钩调用 module_invoke_all 函数来完成的。 这将返回实现“node_operations”钩子的所有模块的数组。 在我的例子中,有以下两个模块:'node' 和 'nodewords'。

当我在我的模块中调用 module_invoke_all('node_operations') 时,它只返回 'nodewords' 模块,而不是 'node' 模块。 这是因为“node_node_operations”函数不存在。

谁能解释这种行为?

【问题讨论】:

    标签: drupal hook


    【解决方案1】:

    看起来钩子在 node.admin.inc 中,它不是自动包含的。见http://api.drupal.org/api/drupal/modules--node--node.admin.inc/function/node_node_operations/7

    恕我直言,这是一个错误,您应该查看是否已经存在问题,如果没有,请创建一个新问题。

    无论如何,作为一种解决方法,您可以在调用钩子之前像这样包含 node.admin.inc 文件:

    <?php
    module_load_include('inc', 'node', 'node.admin');
    ?>
    

    (是的,奇怪的语法;))

    【讨论】:

    • 这行得通。谢谢。很高兴知道只有 .module 文件中的钩子会自动包含在内。
    • Drupal 7 最初包含一个函数注册表,它自动解析所有文件并存储哪些函数存储在哪里。但这又被删除了,因为它有太多缺点,比如使用 APC 时实际上速度较慢。
    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2020-06-16
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多