Перебираем массив Shopware и пытаемся получить ключ, который не работает

#twig #shopware

Вопрос:

Привет, я сейчас пытаюсь получить описание первой навигации по меню в Shopware 6. Для этого я использую массив page.header.navigation.active.breadcrumb и использую его ключ в page.header.navigation.tree[ключ].описание, но мое значение ключа пустое. Это происходит из-за того, что ключ пуст без всякой причины.

Вот мой Код:

 {% sw_extends "@Storefront/storefront/section/cms-section-sidebar.html.twig" %}

{% set topMenu = null %}
{% for key, value in page.header.navigation.active.breadcrumb %}
    {% if loop.index == 2 %}
        {% set topMenu = value %}
        {# {% set topMenuDescription = page.header.navigation.tree[key].category.description %} #}
        {% set topMenuDescription = key %}
    {% endif %}
{% endfor %}
{% set currentMenu = page.header.navigation.active.breadcrumb | last %}
{# {% set currentMenu = page.header.navigation.active.name %} #}
{# {% set topMenuDescription = page.header.navigation.active.description %} #}
{# {% if ! topMenuDescription %}
    {% set topMenuDescription = page.header.navigation.active.description %}
{% endif %} #}

{% block section_main_content_block %}
    <div class="category-top">
        <div class="category-banner">
            <img src="/media/6a/fd/8b/1632946677/listing-banner.jpg">
            <div class="category-banner-headlines">
                {% if (currentMenu != topMenu) %}
                    <h3>{{ topMenu }}<h3>
                    <h2>{{ currentMenu }}<h2>
                {% else %}
                    <h2 class="sameMenu">{{ currentMenu }}<h2>
                {% endif %}
            </div>
        </div>
        <div class="category-description">
            <h1>{{ currentMenu }}</h1>
            {{ topMenuDescription | trans | raw }}
        </div>
    </div>
    {{ parent() }}
{% endblock %}
 

Также вот структура ключа, который я хочу получить:
ключ-который-я-хочу-получить

И вот описание, которое я хочу получить: описание, которое я хочу получить

Примечание: Описание в моем примере пусто, так как я показываю демонстрацию в отдельной области тестирования, где я не задал описание

Ответ №1:

Причина topMenuDescription пуста в том, что переменная существует только внутри области {% for %} созданного вами цикла. Вне этого цикла переменная не существует.

Чтобы решить эту проблему, вам необходимо изменить область действия topMenuDescription , определив переменную вне цикла {% for %}

 {% set topMenuDescription = null %}
{% for key, value in page.header.navigation.active.breadcrumb %}
    {% if loop.index == 2 %}
        {% set topMenu = value %}
        {# {% set topMenuDescription = page.header.navigation.tree[key].category.description %} #}
        {% set topMenuDescription = key %}
    {% endif %}
{% endfor %}
 

боковая заметка

Вам действительно следует включить отладку twig во время разработки, так как ваш текущий фрагмент кода выдаст RuntimeError сообщение, объясняющее, что переменная не существует.

Комментарии:

1. О, я не знал об этом, так как я вроде как новичок в SW6 и twig. Это работает, большое спасибо 🙂 Кроме того, как бы я включил отладчик twig? Это то же самое, что установить .env из prod в dev?

2. кажется, так