TWIG переопределить блок в INCLUDE шаблоне

Author Автор: Роман Чернышов    Опубликовано: 26 сентября 2011

Странный получился заголовок поста, но думаю тем кто столкнулся со следующей проблемой, в процессе работы с шаблонизатором TWIG, будет всё понятно. (О самом шаблонизаторе, его преимуществах и недостатков коих не так их и много, напишу в следующем посте, а пока забегая вперед, обсуждаем проблему)
Имеем следующую структуру шаблона:

Шаблон main.twig:

{% include header.twig %}
{% block block1 %}
{% endblock %}

Шаблон header.twig:

{% block block2 %}
header
{% endblock %}

Шаблон index.twig:

{% extends "main.twig" %}
{% block block1 %} text for block 1 {% endblock %}
{% block block2 %} text for block 2 {% endblock %}

При вызове шаблона index.twig, блок block1 в родительском шаблоне main.twig заменяется на блок из шаблона index.twig. По логике следует также, что блок block2 находящийся в шаблоне header.twig (который инклудится в шаблоне main.twig) так же заменится на блок из шаблона index.twig, но этого не происходит.

Длительные поиски решения, ни к чему толковому не привели. Заменить блок в подключенном INCLUDE шаблоне так и не получилось. Единственное решение в данной ситуации видится пока следующим:

Шаблон main.twig:

{% block block2 %}{% include header.twig %}{% endblock %}
{% block block1 %}
{% endblock %}

Шаблон header.twig:

header

Шаблон index.twig:

{% extends "main.twig" %}
{% block block1 %} text for block 1 {% endblock %}
{% block block2 %} text for block 2 {% endblock %}

Т.е. мы перенесли теги блока в родительский шаблон main.twig, и переопределяем подключаемый файл. У этого способа есть свои недостатки, но тем не менее он работает.

Если у вас есть свои идеи, буду рад выслушать.

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 159₽
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка