2017-09-15 1 views
0

Disons que j'ai un Page.ss et PageType.ss modèles dans Mise en page du dossier.modèles SilverStripe CMS hiérarchie

Page.ss:

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

PageType.ss a un contenu à transmettre à Page.ss et vu alltogether. Le contenu de la page restera le même pour les différents types de page, donc je ne souhaite pas avoir de balisage en double. J'ai trouvé renderWith() mais je ne peux pas le faire fonctionner. Je peux utiliser des inclusions conditionnelles mais ça ne me semble pas juste. Est-ce possible ou ai-je tout faux?

+0

Est-ce que 'Page.ss' pour la mise en page globale et' PageType.ss' pour la mise en page spécifique pour un type de page spécifique (sous-classe PHP de 'Page')? – wmk

+0

Oui, c'était l'idée – jirkap

Répondre

1

Vous pouvez passer des paramètres à COMPREND dans les modèles.

Page.ss

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

PageType.ss devra être dans les modèles/includes.

Commander la référence https://docs.silverstripe.org/en/3/developer_guides/templates/syntax/#includes

+0

D'accord, mais de cette façon, je ne peux pas créer des pages de type PageType dans CMS, non?Ce que j'avais à l'esprit était fondamentalement de reproduire la logique de modèle de niveau supérieur comme seule page d'accueil est complètement différente. Par exemple. J'ai Page.ss qui a un balisage à l'échelle du site excl. tout le contenu du corps. Ensuite, j'ai Layout/Page.ss et Layout/HomePage.ss. Dans Layout Page.ss, je définirais le balisage interne à l'ensemble du site, mais il existe deux autres mises en page différentes, par ex. PageType1 et PageType2. Mais les deux devraient être enveloppés par le balisage Layout/Page.ss et toutes les pages devraient être enveloppées par Page.ss au plus haut niveau. – jirkap

+0

Vous devriez être en mesure d'inclure un modèle de page dans un autre. Donc 'PageType1.ss' contiendrait tout le html et' PageType2.ss' contiendrait '<% ​​include PageType1%>' Si cela ne fonctionne pas, placez tout le html dans un include puis à la fois 'PageType1' et' PageType2' peut appeler cela inclure. –

1

Le structur habituel modèle dans SilverStripe (3) est:

/templates/ dossier principal pour tous les modèles

/templates/Page.ss Modèle principal pour toutes les pages. $ A la mise en page incluent le contenu spécifique pagetype

/templates/mise en page/ détient des modèles pour la mise en page $

/templates/Layout/Page.ss remplace la mise en page $ pour le type de page "Page"

/template/Layout/OtherPageType.ss $ pour la mise en page "OtherPageType"

/templates/includes/ choses qui est inclus à l'aide <% incluent%>

/templates/Includes/Header.ss

/templates/Includes/Footer.ss

donc votre modèle principal pourrait ressembler

<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> 

Voir aussi SilverStripe lessons