2016-11-23 14 views
0

Lassen Sie uns sagen, dass ich diese Zweig-Vorlagen haben:Erweiterung Zweig Blöcke in einem komplizierten Szenario

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 (der von der Steuerung geladene)

{# 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> 

Dieser Code funktioniert nicht (kann nicht verwendet werden parent() in widget.twig als es keine Vorlage erstreckt oder mit), aber es sollte illustriere, was ich zu erreichen versuche. Die Grundidee ist:

  • Um zu arbeiten, widget.twig erfordert eine js Bibliothek als Tag in die geladen in werden.
  • Das Widget kann mehrmals auf einer Seite gerendert werden.
  • Andere Widgets sollten in der Lage sein, auf diese Weise auch eigene Tags hinzuzufügen, aber sie sollten die zuvor hinzugefügten Tags nicht überschreiben (sie sollten angehängt werden).
  • Ich möchte nicht mehr als ein beliebiges Tag hinzufügen, das von einem Widget auf der Seite benötigt wird.

Irgendwelche Ideen auf, wie ich dieses erreichen kann, würde sehr geschätzt werden. Ich habe zwei SO-bezogene Fragen ohne Glück gelesen.

Antwort

Verwandte Themen