2016-06-29 8 views
1

Ich bin dabei, ein modular page Thema in grav (die twig als Vorlage-Engine verwendet) zu bauen.Hinzufügen einer Eigenschaft zu einem vorhandenen Objekt in Zweig

Standardmäßig besteht ein modulares Design aus mindestens zwei Zweigvorlagen-Dateien: Die eine enthält den Seitenrahmen einschließlich des Kopfes, die andere das Markup eines Inhaltsmoduls. Grav des standard theme liefert Beispiele dieser Vorlagen:

  1. modular page frame example
  2. module example

Wie Sie sehen können, das Modul (Beispiel) nicht über einen head oder javascripts Block Javascripts auf der HTML-Kopf hinzufügen . (Dies wäre nicht einmal möglich, da eine typische modulare Seite aus mehreren Modulen besteht. Wenn also zwei verschiedene Module versuchen würden, den javascripts Block zu ändern, würde der letzte die von der ersten vorgenommenen Änderungen überschreiben, was zu unbeabsichtigten Ergebnissen führen würde) .

Es kommt jedoch vor, dass ich innerhalb eines Moduls etwas Javascript-Code zum Kopf meiner Seite hinzufügen muss. Ich dachte über eine Lösung nach und hatte die Idee, den Javascript-Code als Eigenschaft zu einem Objekt hinzuzufügen, das "site wide" existiert, nämlich pages object.

Dies führt zu meiner Frage:

Wie kann ich Eigenschaften auf ein vorhandenes Objekt mit dem Zweig Syntax hinzufügen?

Abgesehen davon würde ich auch gerne wissen, ob Sie an irgendwelche Gründe denken können, warum diese Lösung möglicherweise nicht funktionieren könnte. Aber wenn du mir bei der Syntax hilfst, kann ich es auch einfach ausprobieren ...

Antwort

0

Manipulieren des Zustandes eines Objektes sollte nicht in einer Twig-Vorlage erfolgen. Die Ansicht sollte Daten ausgeben, die ihr übergeben wurden.

versuchen, die Javascripts der letzten Änderungen blockieren zu ändern, indem die ersten gemacht würde überschreiben, die zu unbeabsichtigten Ergebnissen

Sehen Sie diese Antwort here für eine Erklärung dafür, wie mehr Blöcke haben, führen würden hängen Inhalt zu einem Block, anstatt es zu überschreiben. Sie können einfach einen 'extra_scripts'-Block oder etwas ähnliches haben und dann jedes erforderliche Javascript für ein bestimmtes Modul an diesen Block anhängen, wie in dem beschriebenen Link beschrieben. Im Wesentlichen müssen Sie {{ parent() }} verwenden, um sicherzustellen, dass Inhalt von der übergeordneten

+0

erstens enthalten ist: Vielen Dank für Ihre Antwort. Ich fürchte jedoch, dass das nicht möglich ist, indem ein Block mit '{{parent()}}' angehängt wird, weil der Block, der angehängt werden soll, nicht vom Elternteil kommt. Ich versuche es mit einer Skizze https://www.twiddla.com/xa84jm zu erklären. Aber selbst wenn es funktionieren würde, ist ein anderes (wichtigeres) Problem, dass die Modulvorlagen einfach nicht vom Seitenrahmen erben, so dass es theoretisch nicht möglich ist, vom Elternteil zu erben. – speendo