Twig, как проверить, какой шаблон рендерится - PullRequest
0 голосов
/ 07 сентября 2018

у меня

<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 и так далее, это вообще возможно?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Если путь - это единственное, что зависит от текущего шаблона, я бы изменил пример 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 %}
0 голосов
/ 07 сентября 2018

Вы можете использовать глобальную переменную _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 %}

демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...