我有一个带有段落字段的内容类型。该段字段有两个段落字段,我将称之为分段。
我想根据预处理函数中设置的标志打印这两个项中的一个。
段落: field_banner_header
分段: field_banner_header_single、field_banner_header_multi
树枝:
{% if callout_options == 'Single' %}
{{ content.field_banner_header[0]['#node'].field_banner_header_single.value }}
{% else %}
{{ content.field_banner_header[0]['#node'].field_banner_header_multi.value }}
{% endif %}我有一个预处理钩子,它在callout_options中存储bool的值(“单”或“多”):
function cse_preprocess_node(&$variables) {
$node = $variables['elements']['#node'];
if ($node->getType() == 'unit_landing_page') {
$variables['callout_options'] = $node->get('field_active_callout_tab')->value;
}
}在页面呈现中,我得到以下错误:
快速编辑drupal.js?v=8.4.6:13无法将呈现的实体字段标记(与)关联到相应的呈现实体标记:没有找到与之对应的父DOM节点。这通常是由于该实体类型的主题模板忘记打印属性造成的。
我可能错了,但这似乎是在告诉我,我所指的这一分段是错误的。
打印分段的正确语法是什么?
发布于 2018-05-16 18:02:28
弄明白了。问题是布尔值被视为标记,因此我将其添加到条件中,如下所示:
{% if content.field_active_callout_tab.0['#markup'] == 'Single' %}
{{ content.field_banner_header_single.0 }}
{% else %}
{{ content.field_banner_header_multi.0 }}
{% endif %}我通过将布尔字段(field_active_callout_tab)传递给kint模块并检查其属性来发现这一点。
发布于 2018-05-14 20:26:53
看来你的预处理功能才是关键。要获得字段的值,请执行以下操作:
$callout_tab = $node->get('field_active_callout_tab')->first()->getValue();
$variables['callout_options'] = $callout_tab['value'];真的,请安装Devel子模块Kint,然后先检查您得到了什么:
ksm($node->get('field_active_callout_tab')->value);哪一个最有可能为您提供NULL或数组。所以{% if callout_options == 'Single' %}永远不能工作。
关于这一分段,我所能得到的只有实体ID:
{{ kint(content.field_paragraphs.0['#paragraph'].get('field_subparagraph').value) }}但也许我做错了什么(你已经自己解决了)。但是,如果实体ID确实是可以得到的最大值,那么最好也加载预处理函数中的项,并像传递bool那样将呈现数组传递给Twig。从理论上讲,这应该是可行的:)
https://drupal.stackexchange.com/questions/261633
复制相似问题