Drupal 8 hook_theme_suggestions_HOOK_alter() 未被使用
Drupal 8 hook_theme_suggestions_HOOK_alter() not being used
我正在使用 hook_theme_suggestions_HOOK_alter() 根据内容类型为 page.html.twig 添加主题挂钩建议:
function mytheme_theme_suggestions_page_alter(array &$suggestions, array $variables) {
$node = \Drupal::request()->attributes->get('node');
$suggestions[] = 'page--node--' . $node->getType();
}
现在我的 Twig 调试模式选择了这个:
<!-- FILE NAME SUGGESTIONS:
* page--node--case.html.twig (new suggestion based on content type 'case')
* page--node--3.html.twig
* page--node--%.html.twig
* page--node.html.twig
x page.html.twig
-->
但是,当我创建一个名为 page--node--case.html.twig
的文件时,它没有被渲染。相反,正在使用 page.html.twig
。
有人知道发生了什么事吗?
我发现出了什么问题。
显然,在定义新建议时,Drupal 需要下划线而不是破折号。然后Drupal将这些下划线转换成破折号,这样实际的文件名还是page--node--case.html.twig
所以:
$suggestions [] = 'page--node--'.$node->gettype();
应该是:$suggestions [] = 'page__node__'.$node->gettype();
我正在使用 hook_theme_suggestions_HOOK_alter() 根据内容类型为 page.html.twig 添加主题挂钩建议:
function mytheme_theme_suggestions_page_alter(array &$suggestions, array $variables) {
$node = \Drupal::request()->attributes->get('node');
$suggestions[] = 'page--node--' . $node->getType();
}
现在我的 Twig 调试模式选择了这个:
<!-- FILE NAME SUGGESTIONS:
* page--node--case.html.twig (new suggestion based on content type 'case')
* page--node--3.html.twig
* page--node--%.html.twig
* page--node.html.twig
x page.html.twig
-->
但是,当我创建一个名为 page--node--case.html.twig
的文件时,它没有被渲染。相反,正在使用 page.html.twig
。
有人知道发生了什么事吗?
我发现出了什么问题。
显然,在定义新建议时,Drupal 需要下划线而不是破折号。然后Drupal将这些下划线转换成破折号,这样实际的文件名还是page--node--case.html.twig
所以:
$suggestions [] = 'page--node--'.$node->gettype();
应该是:$suggestions [] = 'page__node__'.$node->gettype();