我似乎无法使用template.php覆盖函数

时间:2011-08-18 08:09:20

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

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

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

function themename_comment_node_view($node, $view_mode)

如果我取消themename_它会导致错误,说我无法重新声明它。我可以复制评论模块并直接编辑它,但我认为这是我主题的方式吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

因为使用以下代码在comment_build_comment()中调用了hook_node_view()

  // 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模板文件。

答案 1 :(得分:-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

希望有所帮助:)