2017-09-15 86 views
0

比方說,我有一個Page.ss佈局文件夾PageType.ss模板。SilverStripe CMS模板層次

Page.ss

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

PageType.ss有一些內容將被傳遞給Page.ss和產品總數觀看。頁面的內容對於不同的PageTypes將保持不變,所以我不想重複標記。我找到了renderWith(),但我無法讓它工作。我可以使用條件包含,但它只是感覺不對。這是可能的還是我都錯了?

+0

對於特定的頁面類型('Page'的PHP子類),整體佈局和'PageType.ss'是'Page.ss'嗎? – wmk

+0

是的,這是想法 – jirkap

回答

1

您可以將參數傳遞給模板中的包含。

Page.ss

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

PageType.ss將需要在模板/ includes目錄。

結帳基準https://docs.silverstripe.org/en/3/developer_guides/templates/syntax/#includes

+0

好的,但這樣我不能在CMS中創建類型爲PageType的頁面,對不對?我想到的基本上是複製頂級模板邏輯,因爲只有主頁完全不同。例如。我有Page.ss,它有全站標記不包括在內。任何機構內容。然後我有Layout/Page.ss和Layout/HomePage.ss。在Layout Page.ss中,我將定義內部網站範圍的標記,但還有其他兩種不同的佈局要呈現,例如PageType1和PageType2。但是兩者都應該被Layout/Page.ss標記包裝,並且所有頁面都應該被Page.ss包裝在頂層。 – jirkap

+0

您應該可以在另一個頁面模板中包含頁面模板。因此'PageType1.ss'將包含所有的html,'PageType2.ss'將包含'<%include PageType1%>'如果這不起作用,則將所有的html放在include中,然後將'PageType1'和' PageType2'可以調用那個包含。 –

1

在SilverStripe通常的模板structur(3)是:對所有模板

/模板/主夾

/templates/Page.ss所有頁面的主要模板。有$佈局包括特定網頁類型,內容

/模板/佈局/適用於$佈局

/templates/Layout/Page.ss模板替換$佈局頁面類型 「頁」

/template/Layout/OtherPageType.ss $佈局 「OtherPageType」

/模板/包括使用包括012/東西%包含%>

/templates/Includes/Header.ss

/templates/Includes/Footer.ss

所以你的主模板看起來像

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

另請參閱SilverStripe lessons