我遇到了一个奇怪的问题,我的块插件的build()方法中的呈现数组似乎没有被模板正确地解释。我有下面的设置。
function my_module_theme(){
return [
'block__my_module__user_header' => [
'render element' => 'children', // also tried without this
'variables' => [
'tabs' => NULL,
'user' => NULL,
],
],
]
}还有我的插件类
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中呈现的“选项卡”依赖于这个上下文。
我完全感到困惑,因为在我的一些模块中,同样的模式对于钩子_主题/块插件很好,但是这个问题出现在其他模块中。
发布于 2020-07-15 06:46:10
这就是块模板的工作方式,它们呈现变量content。
{{ content }}但是,您的代码在块的内部使用块模板,这是没有意义的,因为块模板是由Drupal自动包装在块周围的。您可能希望像构建控制器输出一样构建块内部,方法是使用非从块模板派生的自定义模板,在不使用block__启动模板名时这样做。
https://drupal.stackexchange.com/questions/295277
复制相似问题