Я работаю над проектом PHP, используя Symfony2 с шаблоном Twig, и я не могу найти решение этой проблемы.
У меня есть админ-пакет, и все шаблоны простираются от базы admin, у которой есть мастер-шаблон с меню.
Мне нужно установить текущую вкладку меню в базовом шаблоне страницы на выбранную, когда пользователь находится на этой странице.
Есть ли способ передать параметр базовому шаблону через extends ?
Вот простой пример:
base.html.twig :
{# base.html.twig #} ... <ul> <li{% if menu_selected|default('one') == 'one' %} class="selected"{% endif %}>One</li> <li{% if menu_selected == 'two' %} class="selected"{% endif %}>Two</li> <li{% if menu_selected == 'three' %} class="selected"{% endif %}>Three</li> </ul> ...
page2.html.twig :
{# page2.html.twig #} {% extends 'YourBundle::base.html.twig' %} {% set menu_selected = 'two' %}
Выход из рендеринга page2.html.twig:
<ul> <li>One</li> <li class="selected">Two</li> <li>Three</li> </ul>
Лучший способ, который я только что обнаружил, – это базовый подход, проверяя маршрут для имени маршрута быстрого вызова:
<li class="{% if app.request.attributes.get('_route') == 'homepage' %}active{% endif %}">Home</li>
Или другой способ – назвать все имена ярлыков маршрута в соответствии с группой, к которой она принадлежит. Например, все маршруты из вашего контроллера продуктов начинаются с «product _….», а затем в шаблоне вы можете сделать это:
<li class="{% if app.request.attributes.get('_route') starts with 'product' %}active{% endif %}">