从 Drupal 8 中的 "field" 模板访问 "item" 标签
Access "item" label from within a "field" template in Drupal 8
我有一个字段包含许多应呈现为选项卡的节点。
标记由选项卡控件和后面的选项卡内容组成。
我有一个覆盖的 field
模板呈现:
{# Tab controls #}
<dl class="tabs">
{% for item in items %}
<dd><a>Insert tab label here</a></dd>
{% endfor %}
</dl>
{# Tab content #}
<div class="tabs-content">
{% for item in items %}
<div{{ attributes }}>
{{ item.content }}
</div>
{% endfor %}
</div>
根据文档注释,项目只有两个属性
* - items: List of all the field items. Each item contains:
* - attributes: List of HTML attributes for each item.
* - content: The field item's content.
"tab content" 呈现完美。我有一个将节点呈现为选项卡内容的模板。
我获得了正确数量的选项卡控件,因为我正在遍历项目,但我无法访问项目标签(标题)以正确呈现控件,因为 item.label
不存在。
我可以想到两种方法:
- 创建一个挂钩以某种方式将节点标签添加到
item
。
- 创建两个模板:选项卡控件和选项卡内容,它们都是 select 节点项,但呈现控件或内容。
我不确定两者是否可行。
您可以在模块或主题中定义的预处理函数中轻松执行此操作(假设引用字段称为 field_articles
):
/**
* Implements hook_preprocess_HOOK().
*/
function my_module_preprocess_field(&$variables) {
switch ($variables['field_name']) {
case 'field_articles':
foreach ($variables['items'] as $delta => $item) {
if (!empty($item['content']['#node'])) {
/** @var Node $node */
$node = $item['content']['#node']; // This is referenced node.
$variables['items'][$delta]['label'] = [
'#markup' => $node->label(),
];
}
}
break;
}
}
现在,您的田间树枝模板将包含 item.label
个元素。
我有一个字段包含许多应呈现为选项卡的节点。
标记由选项卡控件和后面的选项卡内容组成。
我有一个覆盖的 field
模板呈现:
{# Tab controls #}
<dl class="tabs">
{% for item in items %}
<dd><a>Insert tab label here</a></dd>
{% endfor %}
</dl>
{# Tab content #}
<div class="tabs-content">
{% for item in items %}
<div{{ attributes }}>
{{ item.content }}
</div>
{% endfor %}
</div>
根据文档注释,项目只有两个属性
* - items: List of all the field items. Each item contains:
* - attributes: List of HTML attributes for each item.
* - content: The field item's content.
"tab content" 呈现完美。我有一个将节点呈现为选项卡内容的模板。
我获得了正确数量的选项卡控件,因为我正在遍历项目,但我无法访问项目标签(标题)以正确呈现控件,因为 item.label
不存在。
我可以想到两种方法:
- 创建一个挂钩以某种方式将节点标签添加到
item
。 - 创建两个模板:选项卡控件和选项卡内容,它们都是 select 节点项,但呈现控件或内容。
我不确定两者是否可行。
您可以在模块或主题中定义的预处理函数中轻松执行此操作(假设引用字段称为 field_articles
):
/**
* Implements hook_preprocess_HOOK().
*/
function my_module_preprocess_field(&$variables) {
switch ($variables['field_name']) {
case 'field_articles':
foreach ($variables['items'] as $delta => $item) {
if (!empty($item['content']['#node'])) {
/** @var Node $node */
$node = $item['content']['#node']; // This is referenced node.
$variables['items'][$delta]['label'] = [
'#markup' => $node->label(),
];
}
}
break;
}
}
现在,您的田间树枝模板将包含 item.label
个元素。