Symfony2 - Веточка - Как я могу отправить параметры в родительский шаблон?


Я работаю над проектом PHP с использованием Symfony2 с шаблоном Twig, и я не могу найти решение этой проблемы.

У меня есть пакет администратора, и все шаблоны распространяются из базы администраторов, в которой есть главный шаблон с меню.

Мне нужно установить текущую вкладку меню в базовом шаблоне страницы на выбранную, когда пользователь находится на этой странице.

Есть ли способ передать параметр в базовый шаблон через расширяется?

Author: Paulpro, 2013-06-22

2 answers

Вот простой пример:

База.html.ветка:

{# 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>
...

Страница 2.html.ветка:

{# page2.html.twig #}
{% extends 'YourBundle::base.html.twig' %}

{% set menu_selected = 'two' %}

Вывод из рендеринга страницы 2.html.twig:

<ul>
  <li>One</li>
  <li class="selected">Two</li>
  <li>Three</li>
</ul>
 72
Author: Paulpro, 2013-06-22 16:28:52

Лучший способ, который я только что обнаружил, - это базовый подход, проверяющий маршрут на имя кратчайшего маршрута:

<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 %}">
 2
Author: pogeybait, 2016-08-04 13:29:02