0

我最近开始使用Smarty,它可以大大减少网页中的样板代码。

如何通过使用 Smarty 制作.php相关.tpl文件的模板来进一步扩展减少样板代码的想法?或者,有没有更简单的,如果更少的“元”,方法?

例如,考虑一个所有页面都具有相同菜单和侧边栏的网站。可以使用 Smarty 为给定页面的每个菜单项生成 HTML 代码。有没有办法生成.tpl文件,因为它们有很多共同点?(也许我的很多设计都可以在两个层面上实现自动化这一事实表明设计不佳?)

这就像使用一个 PHP 文件生成另一个文件一样简单吗?

为了提供一个更具体的例子,我使用 Smarty生成了这个网站的索引页面。如您所见,其他一些页面足够接近,我认为可以更简洁地生成 HTML。我认为为每个页面生成 Smarty 模板的机制是一种合理的方法,尽管我不确定如何进行。

相关的问题

这个问题,Calling Smarties display() method multiple times vs using includes,指的是模板继承,这可能是我试图理解的 OOP 类似物。

4

1 回答 1

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>

Where$view代表content我想要显示的(另一个模板)。如您所见,我的设置是多语言的,$lang|cat:如果您不想处理一种以上的语言,可以删除该部分。

如果您想让某些页面覆盖heador menu,则可以很容易地执行以下操作:

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

通过将您的模板分解成更小的可覆盖的块,我认为您可以为您的模板保持一个相当稳固的结构,并且仍然允许异常加载自定义代码。

于 2012-12-14T04:58:21.557 回答