You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Twig中根据元素现有类添加指定类?(Drupal 10)

解决Drupal 10 Twig中为指定类元素添加自定义类的问题

我在开发Drupal 10网站,需要在Twig模板里给带有views-field views-field-title类的卡片标题添加Card-label类,试了几次都没成功。

现有Twig模板片段

<div class="Cardlist">
    {% if title %}
        <h3>{{ title }}</h3>
    {% endif %}
    {% for row in rows %}
        {%
            set row_classes = [
                default_row_class ? 'views-row',
            ]
        %}
        <div class="Card">
            <div{{row.attributes.addClass(row_classes)}}>
                {{ row.content }}
            </div>
        {% endfor %}
    </div>
</div>

之前尝试的代码

{% if 'views-field views-field-title' in row.content['#row'].attributes.class %}
    <div class="Card-label">
        {{ title }}
    </div>
{% else %}
    {{ title }}
{% endif %}

当前生成的HTML

<div class="views-field views-field-title">
    <span class="field-content">My Title</span>
</div>

期望实现的HTML

<div class="Card">
    <div class="Card-label">
        <h3>My Title</h3>
    </div>
</div>

解决方案

之前的判断逻辑有误:row.content['#row'].attributes.class获取的是行的类属性,而目标元素是行内标题字段的类。正确做法是遍历row.content里的每个字段元素,判断字段类后再包裹自定义容器:

将模板中{{ row.content }}的部分替换为以下代码:

{% for field in row.content %}
    {% set field_classes = field.attributes.class %}
    {% if 'views-field-title' in field_classes %}
        <div class="Card-label">
            {{ field }}
        </div>
    {% else %}
        {{ field }}
    {% endif %}
{% endfor %}

如果需要把标题内容用<h3>包裹,可进一步调整:

{% for field in row.content %}
    {% set field_classes = field.attributes.class %}
    {% if 'views-field-title' in field_classes %}
        <div class="Card-label">
            <h3>{{ field.content }}</h3>
        </div>
    {% else %}
        {{ field }}
    {% endif %}
{% endfor %}

这样就能精准匹配带有views-field-title类的字段,为它添加Card-label容器,实现预期的HTML结构。

内容的提问来源于stack exchange,提问作者svenjaleo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:12:13