2012-12-13 104 views
0

我最近開始使用Smarty,這可以大大減少網頁中的樣板代碼。使用Smarty的模板模板

如何通過使用Smarty創建.php和相關的.tpl文件的模板來進一步減少樣板代碼?或者,是否有一個更簡單的方法,如果不是那麼「元」的方法呢?

例如,考慮一個網站,其中所有頁面具有相同的菜單和邊欄。可以使用Smarty爲給定頁面的每個菜單項生成HTML代碼。有沒有辦法生成.tpl文件,因爲它們共享這麼多共同點? (也許這樣的事實,我的設計可以在兩個層面上自動化,這表明設計很糟糕?)

這與使用一個PHP文件生成另一個文件一樣簡單嗎?

爲了提供更具體的例子,我使用Smarty生成了this web site的索引頁。正如你所看到的,otherpagessome已經足夠接近我認爲可以更簡潔地生成HTML。我認爲爲每個頁面生成Smarty模板的機制是合理的方法,但我並不確定如何繼續。

相關SO問題

這個問題,Calling Smarties display() method multiple times vs using includes,指的是模板繼承,這可能是我想要得到的OOP模擬。

+0

你在找什麼信息沒有被其他問題回答?答案是{include}是在其他模板中重複使用模板的好方法,它可以做到你想要的。 – Danack

+0

另一篇文章完全回答了它。我把這個標記爲重複。如果主持人認爲由於措辭不同可能成爲這個問題的有用路標,我沒有立即刪除。 – mac389

+0

[Calling Smarties display()方法多次vs使用包含](http:// stackoverflow。com/questions/8019093/calling-smarties-display-method-multiple-times-vs-using-include) –

回答

1

我最常做的,這可能不是最好的方法,但可能會幫助你,是有一個全局模板,其中包括模板headermenufooter,等等,包括一個數據驅動的content模板。

{* Smarty Template *} 
{* Core Template *} 
{* Multi-lang - Loads all inner components of the page *} 
<!DOCTYPE HTML> 
<html> 
    <head> 
     {include file=$lang|cat:"/head.tpl"} 
    </head> 
    <body> 
     {include file=$lang|cat:"/menu.tpl"} 
     {include file=$lang|cat:"/body.tpl"} 
     {include file=$lang|cat:"/footer.tpl"} 
    </body> 
</html> 

在那裏,我有一個簡單的body.tpl,可以少做的:

{* Smarty Template *} 
{* Base Template for BODY *} 
<div> 
    {include file=$lang|cat:"/"|cat:$view|cat:".tpl"} 
</div> 

其中$view代表content我希望顯示(另一個模板)。正如你所看到的,我的設置是多語言的,如果你不想處理多種語言,你可以刪除$lang|cat:部分。

如果你想有一些頁面覆蓋headmenu,這將是非常容易做到的事情,如:

{if isset($headerOverride) } 
    {include file=$headerOverride} 
{else} 
    {include file=$lang|cat:"/head.tpl"} 
{/if} 

通過打破你的模板,以較小的塊是overridables我認爲你可以保持非常穩固的模板結構,並仍允許異常加載自定義代碼。