我已经成功使用预处理页面挂钩,例如:
function mytheme_preprocess_page__node_front(&$variables) {
...
}
and
function mytheme_preprocess_page__node_12(&$variables) {
...
}
它们分别与名为 page--front.html.twig 和 page--12.html.twig 的自定义模板相关。
我正在尝试为名为“视频”的内容类型实现相同的挂钩和模板配对。我知道有一个区别,我的示例是针对特定页面的自定义模板,而我的目标是针对整个内容类型的自定义模板,但我有一个名为 node--video.html.twig 的自定义模板,它可以用作所有视频页面的模板。但是,当我尝试根据此模板名称编写挂钩时:
function mytheme_preprocess_node__video(&$variables) {
...
}
这是行不通的。我认为我要么无法定义这样的钩子,要么我只是错误地命名了它。我发现了一些与此有些相关的线程,例如this https://www.drupal.org/node/1692202这似乎意味着我需要为所有节点定义一个钩子,然后编写一个单独处理每种类型的 if 语句。
所以.......
最后一个问题:我可以为整个内容类型定义一个钩子吗?如果是的话我做错了什么?
使用预处理器中的条件来获取节点类型,然后在其中执行逻辑或调用另一个函数。
function mytheme_preprocess_node(&$variables) {
switch ($variables['node']->getType()) {
case "video":
// ...
break;
case "something_else":
// ...
break;
}
}
理论上,您可以通过尝试调用名为的函数来模拟您想要实现的目标mytheme_preprocess_node__" . $variables['node']->getType()
如果存在的话,但是太过于大惊小怪,没有明显的好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)