You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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变量,可以通过主题的预处理函数把它传递进去:

  1. 打开你当前主题的.theme文件(比如mytheme.theme),添加这段代码:
/**
 * Implements hook_preprocess_layout().
 */
function mytheme_preprocess_layout(&$variables) {
  // 获取当前页面的page构建数组并传递给布局模板
  $variables['page'] = \Drupal::service('page_renderer')->renderPage();
}

记得把mytheme换成你实际的主题名称。

  1. 之后你就能在布局模板里用{{ 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:35:25