TWIG переопределить блок в INCLUDE шаблоне
Странный получился заголовок поста, но думаю тем кто столкнулся со следующей проблемой, в процессе работы с шаблонизатором 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, и переопределяем подключаемый файл. У этого способа есть свои недостатки, но тем не менее он работает.
Если у вас есть свои идеи, буду рад выслушать.

Автор:






