Скажем, у меня есть эти шаблоны хворостины:Расширение хворостины блоков в сложном сценарии
base.twig
{# base.twig #}
<html>
<head>
{% include 'head_js.twig' %}
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
head_js.twig
{# head_js.twig #}
{% block headJS %}
<script src='/js/some-script.js'></script>
{% block headJSExtra %}{% endblock %}
{% endblock %}
page.twig (тот, который загружен контроллером)
{# page.twig #}
{% extends base.twig %}
{% block content %}
<p>Widget 1</p>
{% include 'widget.twig' with { name: 'foo' } %}
<p>Widget 2</p>
{% include 'widget.twig' with { name: 'bar' } %}
{% endblock %}
widget.twig
{# widget.twig #}
{% if wigetAlreadyIncluded is not defined %}
{% block headJSExtra %}
{{ parent() }}
<script src='/js/widget.js'></script>
{% endblock %}
{% set widgetAlreadyIncluded = true %}
{% endif %}
<p>My name is {{ name }}</p>
Этот код не работает (не может использовать родительский() в widget.twig, как это не расширение или с помощью какой-либо шаблон), но он должен иллюстрируют то, что я пытаюсь достичь. Основная идея заключается в том:
- Для того, чтобы работать, widget.twig требует библиотека JS для загрузки в качестве тега в.
- Виджет может отображаться несколько раз на одной странице.
- Другие виджеты должны также иметь возможность добавлять свои собственные теги таким образом, но они не должны переопределять предыдущие добавленные теги (они должны быть добавлены).
- Я не хочу добавлять несколько раз тег, который требуется для любого виджета, найденного на странице.
Любые идеи о том, как я могу достичь этого, будут очень признательны. Я прочитал два связанных с ним вопроса без всякой удачи.