Setze die Variable im übergeordneten Bereich in Twig

8

In Smarty können Sie

machen %Vor%

Ist es in Twig möglich?

Schlage nicht vor, Blöcke zu verwenden. Ich kenne. Ich brauche eine Variable.

    
disfated 08.11.2013, 06:06
quelle

8 Antworten

8

base.twig

%Vor%

child.twig

%Vor%     
n3xus 27.01.2014 03:19
quelle
6

@ n3xus hat eine nette Antwort gegeben, es hat mir auch wirklich geholfen (Danke), aber Sie können sich auch diese Seite aus der Dokumentation ansehen: Zweigdokumente

Ein besonders nettes Feature ist die Möglichkeit, einen Teil von text / html zu setzen:

%Vor%

Macht es einfach, aus den untergeordneten Vorlagen sehr spezifische Inhalte zu generieren.

    
Petar Zivkovic 02.05.2014 20:54
quelle
6

Wenn Sie den default() -Filter nicht verwenden möchten (dh wenn Sie die Variable mehrfach in Ihren übergeordneten und untergeordneten Vorlagen verwenden möchten), können Sie tatsächlich einen Block definieren, der Ihre gesamte Seite im übergeordneten Element enthält Vorlage, und verschachteln Sie dann Ihre anderen Blöcke darin:

%Vor%

Sie können dann die Variable page im Block page in Ihrer untergeordneten Vorlage überschreiben, indem Sie den Wert und dann den Aufruf von parent() :

festlegen %Vor%

Beachten Sie, dass wir in der übergeordneten Vorlage die Variable page außerhalb des Blocks page definieren, während wir in der untergeordneten Vorlage innerhalb des Blocks page definieren.

Twig macht also folgendes:

  1. Wenn% ce_de% gerendert wird, beginnt es am Anfang von child.twig und setzt die Standardwerte für die Variable base.twig .
  2. Wenn es um den page Block geht, wird page diesen Block überschreiben. Daher wird stattdessen der child.twig -Block in page ausgeführt.
  3. Innerhalb des Blocks child.twig in page werden die neuen Werte für die Variable child.twig festgelegt. Es ruft dann page auf, was besagt, dass es zurück zu parent() geht und den übergeordneten base.twig -Block rendert.
  4. Danach wird die Seite weiter gerendert, wobei alle zusätzlichen Blöcke ersetzt werden, wie in page definiert (in meinem Beispiel wird der Block child.twig dargestellt).

Siehe ein funktionierendes Beispiel hier . Beachten Sie, dass dies komplizierter werden kann, wenn Sie mehrere Vererbungsschichten (z. B. Enkelvorlagen) hinzufügen.

    
alexw 18.09.2015 00:56
quelle
3

Wenn Sie möchten, dass eine Variable einfach von einem Subtemplate "überschreibbar" ist, können Sie Ihre Variable wie folgt im übergeordneten Element festlegen:

%Vor%

So könnten Sie eine Situation wie diese einrichten ...

base.twig

%Vor%

parent.twig

%Vor%

child.twig

%Vor%

Das Endergebnis lautet:

%Vor%

Ich denke, das funktioniert in den meisten Situationen gut. Anstatt zu erzwingen, dass die Parent-Variable vom Child überschrieben wird, lässt die Parent-Variable die Variable von Children überschreiben. Sie können auch ein anderes Verhalten im übergeordneten Element definieren, z. B. Verkettung statt Überschreiben.

    
Moss 05.03.2016 05:57
quelle
2

Sie können Folgendes auf Ihren untergeordneten Seiten verwenden:

%Vor%     
snapster 14.11.2014 10:58
quelle
1

Eine großartige Möglichkeit, etwas zu tun, das ich gerade entdeckt habe:

parent.twig

%Vor%

child.twig

%Vor%

Wenn Ihre untergeordnete Vorlage den Block subvar nicht definiert, ist die Variable in parent.twig leer.

    
Joshua 22.07.2015 12:06
quelle
0

Ein anderer Ansatz besteht darin, die Zweigkonfiguration global in Ihrer Anwendung zu sehen. Zum Beispiel in Silex:

%Vor%

Sie können dann auf diese Variable in allen Vorlagen zugreifen:

%Vor%     
Dean 08.11.2013 10:09
quelle
-1

Verwenden Sie das -Tag mit einbetten

Beispiel:

parent.twig :

%Vor%

child.twig :

%Vor%     
nonlux 08.11.2013 09:03
quelle