Как динамически изменить заголовок страницы с помощью Twig

Я использую Twig для шаблона на своем веб-сайте, я расширяю layout.html.twig на всех моих других страницах веток, поэтому на моем layout.html.twig у меня есть заголовок страницы:

<title>{% block title %}Title of my website{% endblock %}</title>

Теперь моя проблема заключается в том, как динамически изменить этот заголовок на всех моих страницах, например, у меня есть news.html.twig, чтобы показать все последние новости в мире, поэтому я надеюсь, что когда я покажу свою страницу новостей, у меня будет заголовок новости в моем заголовке страницы ...

<title>{% block title %}Title of the news{% endblock %}</title>

person Nll    schedule 27.06.2012    source источник


Ответы (4)


Вы находитесь рядом. В вашем news.html.twig я предполагаю, что у вас есть весь ваш контент в блоке, подобном этому:

{% extends '::layout.html.twig' %}

{% block content %}
    content of the news page here
{% endblock %}`

Поэтому все, что вам нужно сделать, это добавить еще один блок для заголовка за пределами этого блока контента.

{% extends '::layout.html.twig' %}

{% block title %}Title of news page{% endblock %}

{% block content %}
    content of the news page here
{% endblock %}`
person MDrollette    schedule 27.06.2012

Мое решение выглядит более элегантно в дочерних шаблонах:

В вашем layout.html.twig:

<title>{% if page_title is defined %} {{ page_title }} | {% endif %} Your Website</title>

В ваших дочерних шаблонах страниц:

{% extends '::layout.html.twig' %}

{% set page_title = 'Your page-title' %}

{# Put the rest of your page below #}

И вы также можете повторно использовать заголовок, например. занимаюсь <h1>{{ page_title }}</h1> :-)

person Micronax    schedule 07.08.2013
comment
Вы должны поместить тире (или любой другой разделитель) внутри условного блока, например: {% if page_title определено %} {{ page_title }} - {% endif %}Ваш сайт. В противном случае, если page_title не определен, вы получите завершающий разделитель перед базовым заголовком. - person Denis Bobrovnikov; 06.09.2013
comment
Это немного более элегантно, так как обеспечивает заголовок по умолчанию. - person Julien; 14.05.2015
comment
Еще одним преимуществом является то, что вы можете повторно использовать эту переменную, то есть <h1>{{ page_title }}</h1>. - person rybo111; 29.12.2017

Это проще, чем вы себе представляете.

Поставить основной/родительский макет

...
<title>{% block title %}{% endblock %} - My Site</title>
...

и на странице контента (в дочернем макете) получить заголовок страницы

...
<h1>{{ block('title') }}</h1>
...

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

person albert    schedule 23.10.2013

person    schedule
comment
Добро пожаловать в Stack Overflow. Ответы, содержащие только код, не рекомендуются в Stack Overflow, поскольку они не объясняют, как это решает проблему. Пожалуйста, отредактируйте свой ответ, чтобы объяснить, что делает этот код и как он улучшает существующие ответы на этот вопрос, которые уже есть, чтобы он был полезен пользователям с похожими проблемами. - person FluffyKitten; 21.08.2020