树枝中重复字段的唯一 ID - Drupal 8
Unique id to recurring field in twig - Drupal 8
我有一个 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 }}
推荐的 here 不适合我。
如果可能的话,我想解决它 twig-only,不需要任何额外的 php 代码。
非常感谢任何指点或建议
您可以修改循环遍历 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 %}
结果:
Kien Nguyen 的回答并不完全适合我,因为虽然有多个引用实体,但每个实体只有一个标题,所以索引总是以“0”结束,这不是“这正是我可以用作唯一 ID 的值。
但是根据他的逻辑,现在很容易找到解决方案:
我没有将索引用作索引,而是将其用作访问 item.content
中的值的键。 (因为我要使用 item.content 作为唯一 ID,所以我不得不去掉空格,但为了做到这一点,我不得不直接访问 item.content
数组中的值。
在我的场景中,该项目是 'related product' 类型节点的标题,因此它是
- 足够短,可以用作 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,正如最初预期的那样。
感谢您的帮助,Kien!
我有一个 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 }}
推荐的 here 不适合我。
如果可能的话,我想解决它 twig-only,不需要任何额外的 php 代码。
非常感谢任何指点或建议
您可以修改循环遍历 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 %}
结果:
Kien Nguyen 的回答并不完全适合我,因为虽然有多个引用实体,但每个实体只有一个标题,所以索引总是以“0”结束,这不是“这正是我可以用作唯一 ID 的值。
但是根据他的逻辑,现在很容易找到解决方案:
我没有将索引用作索引,而是将其用作访问 item.content
中的值的键。 (因为我要使用 item.content 作为唯一 ID,所以我不得不去掉空格,但为了做到这一点,我不得不直接访问 item.content
数组中的值。
在我的场景中,该项目是 'related product' 类型节点的标题,因此它是
- 足够短,可以用作 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,正如最初预期的那样。
感谢您的帮助,Kien!