"Inhalt Anhängen", um einen block von mehreren subtemplates
gibt es mehrere Fragen auf, wie fügen Sie einen block mit ast. Die Antwort ist immer mit der Vererbung und verwenden, und rufen Sie dann die parent(). Irgendwie weiß ich nicht, wie das funktioniert in meinem konkreten Fall:
Basis.html-Code.Zweig
{% block content %}{% endblock %}
{% block appendable %}
{% endblock %}
{% block another_appendable %}
{% endblock %}
Website.html-Code.Zweig
{% extends base.html.twig %}
{% block content %}
{# Here use/include/embed, i dont know #}
{% use sub1.html.twig %}
{% use sub2.html.twig %}
{% endblock content %}
sub1.html-Code.Zweig
Some content that should be directly rendered
{% block appendable %}
some stuff that should be added to appendable
{% endblock %}
{% block another_appendable %}
This content should be added to "another appendable"
{% endblock %}
sub2.html-Code.Zweig
{% block appendable %}
additional stuff that should be appended
{% endblock %}
Möchte ich, dass sowohl Inhalte von sub1 und sub2 gerendert werden innerhalb von appendable. Wie könnte ich das erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Let ' s go. Ich hatte das gleiche problem und diese Lösung funktioniert bei mir:
Basis.html-Code.Zweig
Website.html-Code.Zweig
sub1.html-Code.Zweig
sub2.html-Code.Zweig
Laut meiner Forschung diese Technik wird als "horizontal reuse", und hier ist der doc:
http://twig.sensiolabs.org/doc/tags/use.html
Um eine Vorlage, die Sie verwenden müssen, die
include
Schlüsselwort, nicht dieuse
Stichwort:AcmeDemoBundle:MySub:sub1.html-Code.Zweig könnte wie folgt Aussehen:
Mit Der Vererbung
Wenn Sie wollen, können Sie die
{{ parent() }}
Schlüsselwort für die Vererbung verwenden. Zum Beispiel, wenn Sie einschließen möchtensub1.html.twig
standardmäßig aber anfügensub2.html.twig
in Ihrem Kind-Vorlage, können Sie Folgendes tun:Basis.html-Code.Zweig
Website.html-Code.Zweig
Ich würde gerne meine eigene Lösung für dieses problem. Implementiert habe ich meine eigene Twig-Erweiterung, die implementiert benutzerdefinierte tag
widget
(ich habe Twig tagembed
als Quelle).Erweiterung
WidgetNode.php:
WidgetTokenParser.php:
TemplateTagsExtension.php:
Dienstleistungen.yml:
Beispiel
views/Blocks/widget.html-Code.Zweig:
views/Dashboard/widgets/Probe.html-Code.Zweig
Zusammenfassung
So, wie Sie sehen können, mit meiner Erweiterung ist es möglich, eine Vorlage für eine erneute Verwendung der Blöcke innerhalb es. Wenn Sie mehrere widgets haben, können Sie mehrere
widget
tags in Ihrem template mit dem gleichen source-template und den block Inhalte überschneiden sich nicht. Im wesentlichen funktioniert es wie die Einbettung der Vorlage mit Twig istembed
(und ich habe diesen tag als eine Quelle für meine Erweiterung), aber mit die einzige (und wichtige) Unterschied - es macht NUR dem block namens "widget". Alle anderen Blöcke werden ignoriert, können aber verwendet werden, in der "widget" - block.Wenn Sie nur definieren von Blöcken in der sub-Vorlagen, nutzen Sie die
block
Funktion und ersetzen ausdrücklich:Basis.html-Code.Zweig
Website.html-Code.Zweig
sub1.html-Code.Zweig
sub2.html-Code.Zweig