Drupal 8.4.3中Twig模板无法显示区块问题求助
刚看了你的问题,咱们一步步来拆解解决这个Twig模板调用区块的问题:
先搞懂第一个报错的核心原因
你一开始碰到的 Twig_Error_Syntax: Unknown "drupal_block" function,本质是Drupal核心的Twig环境本身不带drupal_block()这个函数——这个功能是Twig Tweak模块提供的扩展能力,所以你安装Twig Tweak是走对了第一步,但之后出现的区块损坏提示,得从这几个方向排查:
排查区块相关的关键问题
1. 区块机器名必须完全精准
你提到区块ID是estarmejor_branding,这里要注意:
- Drupal的区块机器名是大小写敏感的,必须和后台「结构→区块」里显示的完全一致(别把下划线写成连字符,或者大小写搞混)
- 不确定的话,直接去后台打开这个区块的编辑页面,URL里的最后一段就是准确的机器名(比如
/admin/structure/block/manage/estarmejor_branding里的estarmejor_branding)
2. 区块必须启用且分配到对应区域
就算机器名对了,如果区块没启用,或者没分配到当前主题的某个区域(比如你自定义的header区域),Twig Tweak调用时就会提示损坏。
- 去后台「结构→区块」找到这个区块,先确认它的状态是「已启用」,再看它是不是被分配到了你当前在用的
Estar Mejor主题的某个区域里。
3. 区块依赖的模块得处于启用状态
报错里那句"Es posible que tenga que activar el módulo original"(可能需要启用原始模块),意思是这个区块属于某个特定模块:
- 如果是你自己创建的自定义区块,得确认创建它的那个自定义模块已经启用了
- 如果是系统自带的区块(比如品牌区块),要检查
System模块有没有启用
4. 确认Twig Tweak的调用语法无误
Drupal 8里Twig Tweak调用区块的正确写法就是你用的这个:
{{ drupal_block('estarmejor_branding') }}
如果需要临时覆盖区块的配置(比如修改显示标签),可以传参数数组:
{{ drupal_block('estarmejor_branding', {label: '我的自定义标题'}) }}
备用方案:用标准区域渲染替代Twig Tweak
要是上面的排查都没问题还是不行,你可以试试Drupal主题的标准玩法:把estarmejor_branding区块分配到你自定义的header区域,然后直接在模板里渲染这个区域就行:
<header id="navbar" role="banner"> <div class="container"> {{ page.header }} </div> </header>
这种方式不依赖第三方模块,稳定性更高,也是Drupal主题开发的常规做法。
最后别忘了清缓存!
每次修改模板、调整区块配置之后,一定要去后台「配置→性能」里清除所有缓存——Drupal的Twig模板和区块配置都有缓存机制,不清缓存的话可能看不到修改效果,甚至会出现奇怪的报错。另外,要注意你安装的Twig Tweak版本得和Drupal 8.4.3兼容,8.4.x对应的是Twig Tweak 1.x系列,别装2.x版本(那是给Drupal 9+用的)。
内容的提问来源于stack exchange,提问作者Elizabeth Alcalá

