Drupal 8 - template_preprocess_node 不工作
Posted
技术标签:
【中文标题】Drupal 8 - template_preprocess_node 不工作【英文标题】:Drupal 8 - template_preprocess_node not working 【发布时间】: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');
?>
我已经在 *** 中解决了不同的问题。
-
开发模块已启用。
尝试使用条件
if ($variables['view_mode'] == 'teaser_full_width') ...
尝试使用print_r
而不是kint
。
尝试更改max_allowed_packet
。
已验证 templatename
已启用并设置为默认值。
缓存已清除。
(文章列表页面)模板文件:-node--article--teaser-full-width.html.twig
template_preprocess_html
在此页面上运行良好。
template_preprocess_node
不在此页面上工作。
(文章单页)模板文件:-node--article--full.html.twig
两个钩子都工作正常。
有谁知道问题出在哪里?我的 drupal 版本是 8.6.10。
【问题讨论】:
【参考方案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以上是关于Drupal 8 - template_preprocess_node 不工作的主要内容,如果未能解决你的问题,请参考以下文章