首页 > 解决方案 > Twig 在 for 循环中添加空格

问题描述

我正在向现有项目添加一个功能,所以我必须使用 twig。我正在显示一个单词的翻译,所以我有一个对象列表。该对象具有多个属性。

 {% for trans in Translations.dictionaryList[0].wordTranslationsList|sortLangAndFreqClass %}
        {% if currentLanguage is not same as (trans.targetLanguage) %}
            {% set currentLanguage = trans.targetLanguage %}
            {% set first = TRUE %}<b> {{- Languages[(currentLanguage |upper)] -}}: </b>
        {% endif %}
        {% if not first %}, {% endif %}
            <a href="{{'res'|url({'view_language' : view_language, 'corpusId': trans.corpus, 'word' : trans.translation})}}">{{- trans.translation -}}</a> ({{- trans.freqClass -}})
        {% set first = FALSE %}
    {% endfor %}

输出如下:丹麦语:hus (10) 英语:home (6) , business (7) , family (7) , live (8) , house (8)

但我想删除逗号前的空格,所以应该是:

丹麦语:hus (10) 英语:home (6), business (7), family (7), live (8), house (8)

我找到了将所有内容写在一行中的解决方案,但这非常丑陋且无法阅读。有没有其他方法可以解决这个问题?

标签: phphtmltwig

解决方案


我相信这不是树枝问题,而是 html 的工作原理。在常规 html 中,如果在任何字符之前有换行符,它将被转换为常规空格。

<p>something
,
another thing</p>

将显示为

something , another thing

现在,查看 twig docs[1],我发现loop任何循环中都有一个隐式变量(就像你正在使用的 for 一样)。这个变量的两个属性是loop.firstloop.last,它告诉你当前元素是第一个还是最后一个元素。

你可以,而不是使用第一种方法,使用最后一个元素并有这样的东西

{% for trans in Translations.dictionaryList[0].wordTranslationsList|sortLangAndFreqClass %}
        {% if currentLanguage is not same as (trans.targetLanguage) %}
            {% set currentLanguage = trans.targetLanguage %}
            <b> {{- Languages[(currentLanguage |upper)] -}}: </b>
        {% endif %}

        <a href="{{'res'|url({'view_language' : view_language, 'corpusId': trans.corpus, 'word' : trans.translation})}}">{{- trans.translation -}}</a> ({{- trans.freqClass -}}){% if not loop.last %}, {% endif %}
    {% endfor %}

请注意我是如何{% if not loop.last %}, {% endif %}<a>标签行附加的。

我不能保证它会起作用,因为我不知道如何在这里尝试,但试一试。

[1] - https://twig.symfony.com/doc/2.x/tags/for.html#the-loop-variable


推荐阅读