【问题标题】:Drupal 8 - template_preprocess_node not workingDrupal 8 - template_preprocess_node 不工作
【发布时间】:2019-12-28 17:26:44
【问题描述】:

我创建了一个文章列表视图,其视图模式为“Teaser Full Width”。该页面看起来不错,并且列出了文章。当我尝试使用 template_preprocess_node(&$variables) 编辑某些内容时,钩子在 Teaser Full Width 中不起作用。但是当我单击任何文章时,单个节点中的相同工作。

<?php
function templatename_preprocess_node(&$variables) {
   kint($variables);die('test');
}
?>

我已经在 StackOverflow 中解决了不同的问题。

  1. 开发模块已启用。
  2. 尝试使用条件if ($variables['view_mode'] == 'teaser_full_width'){ ... }
  3. 尝试使用print_r 而不是kint
  4. 尝试更改max_allowed_packet
  5. 已验证 templatename 已启用并设置为默认值。
  6. 缓存已清除。

(文章列表页面)模板文件:-node--article--teaser-full-width.html.twig

template_preprocess_html 在此页面上运行良好。

template_preprocess_node 不在此页面上工作。

(文章单页)模板文件:-node--article--full.html.twig

两个钩子都工作正常。

有谁知道问题出在哪里?我的 drupal 版本是 8.6.10。

【问题讨论】:

    标签: php drupal module drupal-8 preprocessor


    【解决方案1】:

    根据drupal 的文档,template_preprocess_node() 是节点模板的钩子。由于视图列表页面包含节点但不是节点页面,因此 template_preprocess_node() 在那里不起作用。但是,它仍然是一个 html 页面,所以 template_preprocess_html() 在那里工作。

    简单来说,您的“文章列表视图”是一个页面而不是节点,因此 template_preprocess_node() 不起作用。

    【讨论】:

    • 感谢您的信息。我认为如果有节点我们可以使用节点预处理。因为文章列表页面中的每个项目(预告片)都是节点。如何预处理那些列出的项目???
    • 节点通过视图列出。所以你可以通过 template_preprocess_views_view() 对它们进行预处理。
    • 这意味着我们不能在使用视图的预告列表页面中使用template_preprocess_node。它只能在节点页面中使用,我们需要使用template_preprocess_views_view 来更改预告列表页面中的内容。对吗?
    • 是的。您可以启用主题调试模式。这种方式通过检查元素。你可以看到哪个钩子用于哪个元素。 drupal.org/docs/8/theming/twig/debugging-twig-templates
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多