2012-12-13 48 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我认为你可以保持非常稳固的模板结构,并仍允许异常加载自定义代码。