I am working on a PHP project using Symfony2 with Twig templating, and I can't find a solution for this problem.
I have an admin bundle and all the templates extend from admin base which has a master template with a menu.
I need to set the current tab of the menu in the base template of the page to selected when the user is on that page.
Is there any way to pass parameter to the base template through extends?
to print variable in twig file just use {{ my_variable }}.
You can get the current URL in Twig/Silex 2 like this: global. request. attributes. get('_route') .
Twig is a template engine for the PHP programming language.
Here is a simple example:
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' %}
Output from rendering page2.html.twig:
<ul> <li>One</li> <li class="selected">Two</li> <li>Three</li> </ul>
A better way that I just discovered is the basic approach by checking the route for the shortcut route name:
<li class="{% if app.request.attributes.get('_route') == 'homepage' %}active{% endif %}">Home</li>
Or another way is to name all your route shortcut names according to the group it belongs to. For example all the routes from your products controller start with "product_...." and then in the template you can do this:
<li class="{% if app.request.attributes.get('_route') starts with 'product' %}active{% endif %}">
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With