背景 Smarty是一个模板引擎,将表示层与Web应用程序的逻辑层分开。它非常适合开发Web应用程序的模型 - 视图 - 控制方法。该视图可以由Smarty模板表示,其中只包含HTML和Smarty标签。该控件可以通过PHP文件实现,该文件基于PHP代码中包含的逻辑提供相应的视图。视图通过display()
命令显示模板来实例化。或者,可以将模板作为变量读入,而不通过fetch()
命令进行显示。模板的文件名是这两个命令的参数。如何获取()Smarty模板的子部分
问题fetch()
命令可以读取整个模板。为了读取模板的部分/子部分,通常需要将这些部分中的每一个存储在具有自己的名称的单独文件中,该名称可以是命令的参数。这会创建无用的文件。
问题是否可以通过某种方式标记模板的各个部分来获取Smarty模板的一部分?
案例下面我用Smarty和HTML标签以及相应的带有PHP代码的控制器文件给出了一个示例模板文件。
模板文件(在index.tpl)
<html>
<body>
<div id="sec1">
First section
</div>
<div id="sec2">
Second section
</div>
</body>
</html>
控制器文件(的index.php)
<?php
$smarty = new Smarty;
$template = $smarty->fetch("index.tpl");
?>
在上面的例子中,$template
变量将包含从完整的输出模板页面。以下是该示例中的内容转储。
$template => string(255)
"<html><body>
<div id="sec1">First section</div>
<div id="sec2">Second section</div>
</body></html>"
然而,假设我希望从每一个DIV容器分开的代码来读取,并将它们存储到不同的变量,我怎么能做到这一点?例如,假设我有一个叫做fetch_sub()
的神奇功能。这是我对使用它的期望。
<?php
$smarty = new Smarty;
$div1 = $smarty->fetch_sub("index.tpl", "sec1");
$div2 = $smarty->fetch_sub("index.tpl", "sec2");
?>
然后$div1
等将只包含相关的子部分,而不是整个模板。
其他信息我不与Smarty的初学者,对基本概念相当不错的手感,以及一些Smarty的先进理念。以下是我迄今为止对问题进行概念化并寻求解决方案的尝试。我最初的主要想法是使用{capture}
将模板划分为多个部分,然后以某种方式参考这些部分中的每一部分。我在下面提出了一个大纲的例子。
{capture name=sec1}
<div id="sec1">
First section
</div>
{/capture}
. . .