Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Smarty创建模板的模板_Php_Html_Smarty - Fatal编程技术网

Php 使用Smarty创建模板的模板

Php 使用Smarty创建模板的模板,php,html,smarty,Php,Html,Smarty,我最近开始使用,它可以大大减少网页中的样板代码 我如何通过使用Smarty制作.php和相关.tpl文件的模板来进一步扩展减少样板代码的想法?或者,是否有一种更简单的方法,如果不是“元”方法 例如,考虑一个网站,所有页面都有相同的菜单和侧栏。可以使用Smarty为给定页面的每个菜单项生成HTML代码。有没有办法生成.tpl文件,因为它们有很多共同点?(也许我的设计有这么多可以在两个层面上实现自动化的事实表明我的设计很糟糕?) 这和使用一个PHP文件生成另一个PHP文件一样简单吗 为了提供一个更具

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

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

例如,考虑一个网站,所有页面都有相同的菜单和侧栏。可以使用Smarty为给定页面的每个菜单项生成HTML代码。有没有办法生成

.tpl
文件,因为它们有很多共同点?(也许我的设计有这么多可以在两个层面上实现自动化的事实表明我的设计很糟糕?)

这和使用一个PHP文件生成另一个PHP文件一样简单吗

为了提供一个更具体的示例,我使用Smarty生成了索引页。正如您所看到的,它们之间的距离足够近,我认为可以更节省地生成HTML。我认为为每个页面生成Smarty模板的机制是一种合理的方法,尽管我不确定如何继续

相关SO问题


这个问题涉及到模板继承,它可能是我试图得到的OOP类似物。

我通常做的,可能不是最好的方法,但可能会帮助您,是有一个全局模板,其中包括
页眉
菜单
页脚
,等等的模板。。。并包括数据驱动的
内容
模板

{* 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>
其中
$view
表示我想要显示的
内容(另一个模板)。如您所见,我的设置是多语言的,如果您不想处理多种语言,可以删除
$lang | cat:
部分

如果您想让某些页面覆盖
标题
菜单
,可以很容易地执行以下操作:

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

通过将模板拆分为更小的可重写块,我认为您可以为模板保留一个非常坚实的结构,并且仍然允许异常加载自定义代码。

您要查找的信息中有哪些没有被另一个问题回答?答案是{include}是在其他模板中重复使用模板的好方法,这肯定会满足您的需求。另一篇文章对此给出了完全的回答。我把它标记为复制品。我没有立即删除它,以防主持人认为它可能是一个有用的路标,因为不同的措辞。可能重复@Jack:这就是我链接到它的原因。
{if isset($headerOverride) }
    {include file=$headerOverride}
{else}
    {include file=$lang|cat:"/head.tpl"}
{/if}