Twig, как проверить, какой шаблон отображается

у меня есть

<div>
    <div id = "page-wrapper" class = "sidebar-content white-bg">
        <div class = "row border-bottom">
            {% include '/layouts/navbar.html.twig' %}
        </div>

        {% block body %}{% endblock %}
    </div>
</div>

Теперь в этом /layouts/navbar.html.twig есть тег привязки, атрибут href которого сильно зависит от того, какой шаблон отображается ниже, например, если это шаблон сообщений, href должен быть /posts/new, если это шаблон объявлений, href должен быть /announcements/new и т. д. это вообще возможно?

Пожалуйста, прочтите Как создать минимальный, полный и проверяемый пример

Sfili_81 07.09.2018 15:31

хорошо, позволь мне отредактировать материал

Aram Hayrapetyan 07.09.2018 15:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
41
2

Ответы 2

Вы можете использовать глобальную переменную _self, чтобы решить эту проблему, например.

main.twig

{% include "foo.twig" %}
{% include "bar.twig" %}

foo.twig и bar.twig

<div>
    <div id = "page-wrapper" class = "sidebar-content white-bg">
        <div class = "row border-bottom">
            {% include "nav.twig" with { 'template': _self, } %}
        </div>

        {% block body %}{% endblock %}
    </div>
</div>

nav.twig

{% set path = '' %}
{% if template == 'foo.twig' %}
    {% set path = 'path/to/foo' %}
{% elseif template == 'bar.twig' %}
    {% set path = 'path/to/bar' %}
{% endif %}

{% for i in 0..3 %}
<a href = "http://www.example.com/{{ path }}/{{ i }}">{{ i }}</a>
{% endfor %}

демонстрация

Если путь - это единственное, что зависит от текущего шаблона, я бы изменил пример DarkBee, чтобы просто передать путь из родительского шаблона. Таким образом, вам не понадобится структура if / else:

posts.twig:

<div>
    <div id = "page-wrapper" class = "sidebar-content white-bg">
        <div class = "row border-bottom">
            {% include "nav.twig" with { 'path': '/posts/new' } %}
        </div>

        {% block body %}{% endblock %}
    </div>
</div>

announcements.twig:

<div>
    <div id = "page-wrapper" class = "sidebar-content white-bg">
        <div class = "row border-bottom">
            {% include "nav.twig" with { 'path': '/announcements/new' } %}
        </div>

        {% block body %}{% endblock %}
    </div>
</div>

nav.twig:

{% for i in 0..3 %}
    <a href = "http://www.example.com/{{ path }}/{{ i }}">{{ i }}</a>
{% endfor %}

Другие вопросы по теме