比方說,我有一個Page.ss和佈局文件夾PageType.ss模板。SilverStripe CMS模板層次
Page.ss:
<div><!--content of PageType.ss here --></div>
PageType.ss有一些內容將被傳遞給Page.ss和產品總數觀看。頁面的內容對於不同的PageTypes將保持不變,所以我不想重複標記。我找到了renderWith(),但我無法讓它工作。我可以使用條件包含,但它只是感覺不對。這是可能的還是我都錯了?
比方說,我有一個Page.ss和佈局文件夾PageType.ss模板。SilverStripe CMS模板層次
Page.ss:
<div><!--content of PageType.ss here --></div>
PageType.ss有一些內容將被傳遞給Page.ss和產品總數觀看。頁面的內容對於不同的PageTypes將保持不變,所以我不想重複標記。我找到了renderWith(),但我無法讓它工作。我可以使用條件包含,但它只是感覺不對。這是可能的還是我都錯了?
您可以將參數傳遞給模板中的包含。
Page.ss
<div>
<% include PageType Variable1=$Variable1, Variable2=$Variable2
</div>
PageType.ss將需要在模板/ includes目錄。
結帳基準https://docs.silverstripe.org/en/3/developer_guides/templates/syntax/#includes
好的,但這樣我不能在CMS中創建類型爲PageType的頁面,對不對?我想到的基本上是複製頂級模板邏輯,因爲只有主頁完全不同。例如。我有Page.ss,它有全站標記不包括在內。任何機構內容。然後我有Layout/Page.ss和Layout/HomePage.ss。在Layout Page.ss中,我將定義內部網站範圍的標記,但還有其他兩種不同的佈局要呈現,例如PageType1和PageType2。但是兩者都應該被Layout/Page.ss標記包裝,並且所有頁面都應該被Page.ss包裝在頂層。 – jirkap
您應該可以在另一個頁面模板中包含頁面模板。因此'PageType1.ss'將包含所有的html,'PageType2.ss'將包含'<%include PageType1%>'如果這不起作用,則將所有的html放在include中,然後將'PageType1'和' PageType2'可以調用那個包含。 –
在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>
對於特定的頁面類型('Page'的PHP子類),整體佈局和'PageType.ss'是'Page.ss'嗎? – wmk
是的,這是想法 – jirkap