2017-03-09 7 views
2

Ich möchte in den Stilen und Skripten Blöcke in meinem Layout neue Werte injizieren, aber aus dem Embed-Block. Natürlich wirft es den Fehler Calling "parent" outside a block is forbidden.. Gibt es eine Problemumgehung?Verlängert Elternblöcke von Embed-Vorlage

layout.html.twig:

<!DOCTYPE html> 
<html> 
    <head> 
     {% block style %} 
      <link rel="stylesheet" href="foo.css"> 
     {% endblock %} 
    </head> 
    <body> 

     {% block content "" %} 

     {% block scripts %} 
      <script src="foo.js"></script> 
     {% endblock %} 

    </body> 
</html> 

list.html.twig:

{% extends 'layout.html.twig' %} 

{% block content %} 
    {% embed datatable.html.twig %} 
     {% block tbody %} 
      <tr> 
       <td>my awesome table</td> 
      </tr> 
     {% endblock %} 
    {% endembed %} 
{% endblock %} 

datatable.html.twig:

<table id="myDatatable"> 
    <tbody> 
     {% block tbody "" %} 
    </tbody> 
</table> 

{% block styles %} 
    {{ parent() }} 
    <link rel="stylesheet" href="dataTables.css"> 
{% endblock %} 

{% block scripts %} 
    {{ parent() }} 
    <script src="dataTables.js"></script> 
{% endblock %} 

(Und ich kann/will nicht die Blöcke scripts und styles innerhalb der list.html.twig verwenden. Sie sind Teil der Datentabelle Vorlage, es wird nicht sinnvoll sein, Thema in der list.html.twig zu definieren.). Und leider kann ich use nicht verwenden, weil diese Funktion dynamische Eigenschaften, nur Zeichenfolgen nicht unterstützt.

From the doc:

Da auf die Vorlage übergeben unabhängig vom Kontext Verwendung Aussagen aufgelöst werden, kann die Vorlage Referenz kein Ausdruck sein.

+0

includes/Einbettungen können keine Blöcke in der Schablone ändern/verändern, aus dem es von – DarkBee

Antwort

0

Wie im Kommentar erwähnt, können includes/embeds Blöcke nicht von ihrem Includer ändern. Das besagt, dass es eine Erweiterung gibt, die Ihr Problem lösen könnte.

Diese Deferred Twig Extension kann here

Grundsätzlich ist der Knoten verschiebt die Ausführung eines dem Block gefunden werden. Auf diese Weise können Sie eine Variable erstellen, die alle Ihre JavaScript-Links enthält und sie ausgibt. Dies kann in dem advanced Beispiel, das auf dem GitHub gefunden wird, gesehen werden.

Kredite an Eugene Leonovich für die Herstellung dieser Erweiterung

+0

aufgenommen wurde, scheint ein interessanter Weg zu gehen, in einer perfekten Welt zu sein, die ich würde lieber kein Bündel dafür verwenden – AlexisWbr

Verwandte Themen