#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. кажется, так