【问题标题】:I can't seem to override a function using template.php我似乎无法使用 template.php 覆盖函数
【发布时间】:2011-08-18 08:09:19
【问题描述】:

我正在尝试更改我的 Drupal 输出中的评论链接,我想我已经找到了我想要影响的功能,即function comment_node_view($node, $view_mode)

它在评论模块中。问题是我似乎无法影响它,当我尝试通过将它放在我的 Template.php 文件中并将我的 theme_ 添加到函数名称来覆盖它时?在我的 template.php 中,它现在看起来像这样:

function themename_comment_node_view($node, $view_mode)

如果我取消了 themename_,它会导致一个错误,说我不能重新声明它。我可以复制评论模块并直接编辑它,但我认为这就是我的主题?

【问题讨论】:

    标签: drupal drupal-7 drupal-modules drupal-theming


    【解决方案1】:

    Drupal 主题只能实现主题功能(包括模板预处理和处理功能)或alter hooks

    comment_node_view() 是一个钩子,但它不是一个改变钩子(不同的是,钩子名称以“_alter”结尾)。

    为什么主题不能实现hook_node_view()

    因为hook_node_view() 是在comment_build_comment() 中使用以下代码调用的:

      // Allow modules to make their own additions to the comment.
      module_invoke_all('comment_view', $comment, $view_mode, $langcode);
      module_invoke_all('entity_view', $comment, 'comment', $view_mode, $langcode);
    

    正如评论中突出显示的那样,module_invoke_all() 调用在模块中实现的钩子,而不是主题。

    如果您想从主题更改评论的呈现方式,您应该为您的主题创建 comment.tpl.php 模板文件。

    【讨论】:

    • 我很害怕不要听从你的建议。它很可能不是你的理解,而是我的理解。我正在尝试更改该功能,但如果我无法添加我自己的此功能版本,那么我只能选择直接编辑模块吗?
    • comment_node_view() 不是主题函数,因为函数名称将以 theme_ 开头,并且它不是钩子更改函数,或者函数名称将以 _alter 结尾。因此,您不能在主题中实现themename_node_view()themename_comment_node_view() for Drupal 不是一个特殊的函数,它不会自动调用它;它甚至不是 Drupal 钩子。
    • 无需编辑 Drupal 核心模块,不建议这样做。如果您只需要在所选主题是您编写的主题时更改评论的呈现方式,则只需在主题中添加“comment.tpl.php”模板文件。
    【解决方案2】:

    名称间距为“hook_node_view”,因此您需要将“comment”(评论模块使用的名称间距)替换为您的主题名称:

    function mytheme_node_view($node, $view_node)
    

    钩子:
    http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7

    hook_node_view:
    http://api.drupal.org/api/drupal/modules--node--node.api.php/function/hook_node_view/7

    希望有帮助:)

    【讨论】:

    • 谢谢,这真的很有意义。但不幸的是,它似乎对我不起作用。我实现了这个,但它仍然忽略了我的新版本。我成功地覆盖了另一个函数,即“function mytheme_menu_link(array $variables)”,所以我假设我的 template.php 文件一切正常......有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多