Craft / Twig Как зациклить несколько пар ключ / значение и удалить дубликаты из этого цикла? - PullRequest
0 голосов
/ 02 декабря 2018

В Craft CMS у меня есть дочерние записи, где каждому дочернему элементу назначено местоположение со значениями "city" и "country".

Я хочу вывести список "City, Country"текст, но удалите все дубликаты, поскольку двое или более детей могут использовать одну и ту же пару "город, страна".

Важно, чтобы я мог ссылаться на значение города и страны для каждого ребенка в отдельности, поскольку мне нужно использовать странузначение для отображения флага для каждого дочернего элемента в списке.

Я узнал и попробовал свои силы в "хэше веток" и "ассоциативных массивах" и нашел пригодные для использования фрагменты, но не могу заставить его работать вместедля моего случая.

Это не работает:

{% set children = entry.children %}

{% set locations = {} %}

{% for child in children %}
    {% set city = child.location.parts.locality %}
    {% set country = child.location.parts.country %}

    {% if city not in locations %}
        {% set locations = locations|merge({ city : country }) %}
    {% endif %}

{% endfor %}

{% for location in locations %}
    {% for k, v in location %}
        {{ k }}, {{ v }} <br />
    {% endfor %}
{% endfor %}

1 Ответ

0 голосов
/ 02 декабря 2018

Если вы хотите, чтобы city был ключом вашего массива, вам нужно обернуть их в парантезы, чтобы переменная интерпретировалась как twig.

Также вам не нужныдвойной for цикл, вы строите одномерный массив

{% set locations = {} %}

{% for child in children %}
    {% set city = child.city %}
    {% set country = child.country %}

    {% if city not in locations %}
        {% set locations = locations|merge({ (city) : country }) %}
    {% endif %}

{% endfor %}

{% for k,v in locations %}
    {{ k }}, {{ v }} <br />
{% endfor %}

демо

...