Drupal 8布局模板无page变量时如何打印区块区域?
解决Drupal 8布局模板无法访问page变量/打印区块区域的问题
嘿,我来帮你搞定这个Drupal布局的问题!首先得澄清一个常见的误解:Drupal的布局模板根本不需要依赖page变量来打印区块区域,布局系统本身就有专门的变量来处理这个。
方法一:直接用布局自带的content变量打印区域
你在yml里定义的sidebar_left、right这些区域,布局系统会自动把分配到这些区域的区块内容打包成content数组传递给模板。直接这么写就行:
{# 打印左侧侧边栏区域(先判断是否有内容,避免生成空标签) #} {% if content.sidebar_left %} <section class="sidebar-left"> {{ content.sidebar_left }} </section> {% endif %} {# 打印右侧区域 #} {% if content.right %} <section class="region-right"> {{ content.right }} </section> {% endif %}
这是布局模板的标准用法,完全不需要碰page变量,也是Drupal布局系统设计的初衷。
方法二:如果确实需要获取page变量
要是你因为某些特殊需求必须在布局模板里用page变量,可以通过主题的预处理函数把它传递进去:
- 打开你当前主题的
.theme文件(比如mytheme.theme),添加这段代码:
/** * Implements hook_preprocess_layout(). */ function mytheme_preprocess_layout(&$variables) { // 获取当前页面的page构建数组并传递给布局模板 $variables['page'] = \Drupal::service('page_renderer')->renderPage(); }
记得把mytheme换成你实际的主题名称。
- 之后你就能在布局模板里用
{{ page.sidebar_left }}来调用区域内容了,但还是建议优先用content变量——毕竟布局系统就是专门干这个的,用起来更稳妥。
最后再检查下你的布局yml定义,确保regions的配置完整,比如right区域的label要补全,像这样:
services_overview: label: Services - Overview category: ssld Layouts template: templates/layouts/ssld-hs-overview regions: sidebar_left: label: Sidebar Left right: label: Right Region
这样布局系统才能正确识别区域,把区块内容传递到模板里。
内容的提问来源于stack exchange,提问作者user3713929
相关产品推荐
相关产品推荐

