从 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 不存在。

我可以想到两种方法:

我不确定两者是否可行。

您可以在模块或主题中定义的预处理函数中轻松执行此操作(假设引用字段称为 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 个元素。