【问题标题】:Template of Templates Using Smarty使用 Smarty 的模板模板
【发布时间】:2012-12-13 14:07:19
【问题描述】:

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

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

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

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

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

相关的 SO 问题

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

【问题讨论】:

  • 您在寻找哪些其他问题未回答的信息?答案说 {include} 是在其他模板中重用模板的好方法,这肯定可以满足您的需求。
  • 另一篇文章完全回答了它。我将此标记为重复。我没有立即删除它,以防版主认为它可能是该问题的有用路标,因为措辞不同。
  • @Jack:这就是我链接到它的原因。

标签: php html smarty


【解决方案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}

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

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2013-04-04
    相关资源
    最近更新 更多