首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >块插件的呈现数组值以$variables['content']结束,而不是$variables

块插件的呈现数组值以$variables['content']结束,而不是$variables
EN

Drupal用户
提问于 2020-07-14 22:55:09
回答 1查看 483关注 0票数 0

我遇到了一个奇怪的问题,我的块插件的build()方法中的呈现数组似乎没有被模板正确地解释。我有下面的设置。

代码语言:javascript
复制
function my_module_theme(){
  return [
    'block__my_module__user_header' => [
      'render element' => 'children', // also tried without this
      'variables' => [
        'tabs' => NULL,
        'user' => NULL,
      ],
    ],
  ]
}

还有我的插件类

代码语言:javascript
复制
public function build() {

  $render_array = [
    '#theme' => 'block__my_module__user_header',
    '#tabs' => $this->getTabs(), // returns an array of data to handled in twig
    '#cache' => [
      'contexts' => [
        'route',
        'user',
      ],
    ],
  ];

  if ($user = $this->getContextValue('user')) {
    $render_array['#cache']['tags'] = $user->getCacheTags();
    $render_array['#user'] = $user;
  }

  return $render_array;
}

但是,当我检查theme_preprocess_block()中的变量时,来自build()的所有呈现数组信息都位于$variables中。在实际的小枝模板中相同,如果从build()中删除['#cache'],结果也是一样的。我希望能够直接访问{{ tabs }},但数据位于{{ content['#tabs'] }}中。除了这些不便之外,它还意味着我试图在build()中设置的任何缓存标记/上下文都不会在实际的呈现数组中结束,因此它们将被完全忽略,这是一个问题,因为在twig中呈现的“选项卡”依赖于这个上下文。

我完全感到困惑,因为在我的一些模块中,同样的模式对于钩子_主题/块插件很好,但是这个问题出现在其他模块中。

EN

回答 1

Drupal用户

回答已采纳

发布于 2020-07-15 06:46:10

这就是块模板的工作方式,它们呈现变量content

代码语言:javascript
复制
{{ content }}

但是,您的代码在块的内部使用块模板,这是没有意义的,因为块模板是由Drupal自动包装在块周围的。您可能希望像构建控制器输出一样构建块内部,方法是使用非从块模板派生的自定义模板,在不使用block__启动模板名时这样做。

请参阅https://www.drupal.org/docs/theming-drupal/twig-in-drupal/create-custom-twig-templates-for-custom-module

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/295277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档