2017-09-15 1 views
0

Sagen wir, ich habe eine Page.ss und PageType.ss Vorlagen in Layout- Ordner.Silvers CMS Templates Hierarchie

Page.ss:

<div><!--content of PageType.ss here --></div> 

PageType.ss hat einige Inhalte alltogether weitergegeben Page.ss und gesehen werden. Der Inhalt von Page bleibt für verschiedene PageTypes gleich, daher möchte ich kein doppeltes Markup haben. Ich habe renderWith() gefunden, aber ich kann es nicht zum Laufen bringen. Ich kann bedingte Includes verwenden, aber es fühlt sich einfach nicht richtig an. Ist das möglich oder liege ich falsch?

+0

Ist 'Page.ss' für das allgemeine Layout und' PageType.ss' für ein bestimmtes Layout für einen bestimmten Seitentyp (PHP-Unterklasse von 'Page')? – wmk

+0

Ja, das war die Idee – jirkap

Antwort

1

Sie können Parameter an Includes innerhalb der Vorlagen übergeben.

Page.ss

<div> 
<% include PageType Variable1=$Variable1, Variable2=$Variable2 
</div> 

PageType.ss müssen in den Vorlagen sein/Enthält Verzeichnis.

Kasse die Referenz https://docs.silverstripe.org/en/3/developer_guides/templates/syntax/#includes

+0

Okay, aber so kann ich Seiten des Typs PageType in CMS nicht erstellen, oder?Was ich im Sinn hatte, war im Grunde die Top-Level-Templating-Logik zu replizieren, da nur die Homepage komplett anders ist. Z.B. Ich habe Page.ss, die site-wide Markup excl. beliebiger Körperinhalt. Dann habe ich Layout/Page.ss und Layout/HomePage.ss. In der Layout-Seite.ss würde ich eine innere Seitenrandmarkierung definieren, aber es gibt zwei andere unterschiedliche Layouts, die gerendert werden sollen, z. PageType1 und PageType2. Beide sollten jedoch vom Layout/Page.ss Markup umschlossen werden und alle Seiten sollten von Page.ss auf oberster Ebene umschlossen werden. – jirkap

+0

Sie sollten in der Lage sein, eine Seitenvorlage in eine andere einzufügen. Also 'PageType1.ss' würde das gesamte HTML enthalten und' PageType2.ss' würde ''% include PageType1% enthalten. 'Wenn das nicht funktioniert, legen Sie das gesamte HTML in ein Include und dann beide' PageType1' und ' PageType2' kann dieses Include aufrufen. –

1

Die übliche Schablone structur in Silvers (3):

/templates/ Hauptordner für alle Vorlagen

/templates/Page.ss Hauptvorlage für alle Seiten. Hat $ Layout, um das Seitentyp-spezifischen Inhalt

/templates/Layout/ hält Vorlagen für $ Layout-

/templates/Layout/Page.ss ersetzt $ Layout für den Seitentyp "Seite" gehört

/template/Layout/OtherPageType.ss $ Layout für die "OtherPageType"

/templates// Sachen enthält, die 012 enthalten ist, unter Verwendung von% umfassen%>

/templates/Includes/Header.ss

/templates/Includes/Footer.ss

So Ihre Hauptvorlage wie

aussehen könnte
<html> 
    <head> 
    ... 
    </head> 
    <body> 
     <% include Header %> 

     //other markup for sidebar etc... 

     $Layout //this is where paget type specific stuff comes in, located in /templates/Layout 

     <% include Footer %> 
    </body> 
</html> 

Siehe auch SilverStripe lessons