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

发布于 2024-11-30 07:53:32 字数 381 浏览 2 评论 0原文

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

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

function themename_comment_node_view($node, $view_mode)

如果我去掉 themename_ ,它会导致一个错误,指出我无法重新声明它。我可以复制评论模块并直接编辑它,但我认为这就是我主题化的方式?

I'm trying to alter the comment links in my Drupal output, and I think I have found the function I want to influence, which is function comment_node_view($node, $view_mode).

It is in the Comment module. The problem is I can't seem to effect it, when I try to override it by putting it in my Template.php file and add my theme_ to the function name? In my template.php it looks like this now:

function themename_comment_node_view($node, $view_mode)

if I take off the themename_ it causes an error saying I can't redeclare it. I can copy the comment module and edit it directly but I thought this was how I theme something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你的背包 2024-12-07 07:53:32

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 主题的模板文件。

Drupal themes can only implement theme functions (which include template preprocess and process functions) or alter hooks.

comment_node_view() is a hook, but it's not an alter hook (differently the hook name would end with "_alter").

Why cannot themes implement hook_node_view()?

Because hook_node_view() is invoked in comment_build_comment() using the following code:

  // 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);

As it is also highlighted from the comment, module_invoke_all() invokes the hooks implemented in modules, not themes.

If you want to change how a comment is rendered, from a theme, you should create the comment.tpl.php template file for your theme.

你曾走过我的故事 2024-12-07 07:53:32

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

function mytheme_node_view($node, $view_node)

Hooks:
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

希望有帮助:)

The name spacing is 'hook_node_view' so you need to replace 'comment' (the name spacing used by the comment module) with your theme name:

function mytheme_node_view($node, $view_node)

Hooks:
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

Hope that helps :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文