0

我有一个 Drupal 内容类型,它使用多个相同类型的引用实体(例如,“相关产品”)

我想给每个相关产品的标题字段一个唯一的 ID。它可以是产品名称、迭代器、产品节点的 ID,以最简单的为准。

我创建了一个树枝模板,它覆盖了所述内容类型中所述节点的标题:field--node--title--my-content-type.html.twig但我不知道从这里去哪里。

我可以添加一个自定义ID

{% set attributes = attributes.setAttribute('id', 'customID') %}

但这是静态的,并且在多次调用该字段时不会是唯一的。

{% set node = element['#object'] %}并且按照这里{{ item.content['#node'].field_name.value }}的建议对我不起作用。

如果可能的话,我想只用树枝解决它,而不需要任何额外的 php 代码。

非常感谢任何指示或建议

4

2 回答 2

1

您可以修改循环通过items数组的代码。

例如,我添加了一个迭代索引:

字段--节点--标题--my-content-type.html.twig

{# Here I coppied template from web/core/modules/system/templates/field.html.twig and modified it #}
{%
  set title_classes = [
  label_display == 'visually_hidden' ? 'visually-hidden',
]
%}

{% if label_hidden %}
  {% if multiple %}
    <div{{ attributes }}>
      {% for item in items %}
        <div{{ item.attributes }}>{{ item.content }}</div>
      {% endfor %}
    </div>
  {% else %}
    {% for item in items %}
      <div{{ attributes }}>{{ item.content }}</div>
    {% endfor %}
  {% endif %}
{% else %}
  <div{{ attributes }}>
    <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div>
    {% if multiple %}
    <div>
      {% endif %}
      {% for index, item in items %}                                     {# use index #}
        <span>{{ index }}</span>                                         {# and print it #}
        <div{{ item.attributes }}>{{ item.content }}</div>
      {% endfor %}
      {% if multiple %}
    </div>
    {% endif %}
  </div>
{% endif %}

结果

在此处输入图像描述

于 2021-01-19T10:49:38.063 回答
0

Kien Nguyen 的回答并不完全适合我,因为虽然有多个引用实体,但每个实体只有一个标题,所以索引总是最终为“0”,这不完全是我的值可以用作唯一 ID。

但是根据他的逻辑,现在很容易得出一个解决方案:

我没有将索引用作索引,而是将其用作访问item.content. (因为我要使用 item.content 作为唯一 ID,所以我必须去掉空格,但为了做到这一点,我必须直接访问item.content数组中的值。

在我的场景中,该项目是“相关产品”类型节点的标题,所以它是

  • 足够短,可以用作 HTML id
  • 唯一的(即没有两个不同的产品同名)

所以

{% for index, item in items %}                                     {# use index #}
        <span>{{ index }}</span>                                         {# and print it #}
        <div{{ item.attributes }}>{{ item.content }}</div>

Kien 代码中的一部分变成了

{% for key, item in items %}
      <span id="{{element['#items'][key].value|replace({' ':''}) }}"></span>
      <div{{ item.attributes }}>{{ item.content }}</div>
    

在我的实现中,它会按照最初的预期为每个引用的节点提供一个唯一的 ID。

谢谢你的帮助,基恩!

于 2021-01-20T07:02:24.790 回答