我遇到了一个有趣的问题。我需要使用Smarty模板内的一个Smarty模板。如何使用Smarty模板中的Smarty模板?
这是为什么。我为各种wiki网站使用相同的模板,每个网站都有自己的配置。该配置包含主模板的部分(如更改的标题和标题等)。
这里是一个简化的例子。我已经导致用户在所有网站共享的文件topic-list.template.html
:
<div id="topics">
<h1>{$h1}</h1>
...
</div>
正如你可以看到,这个模板文件包含<h1>
标记,可自定义每个网站。
然后对每个网站的我有,看起来像这样(简体)一个配置文件:
$config = [
"h1-titles" => [
"topics" => "Showing Topics in {\$category}"
]
];
正如你所看到的配置文件中包含一个Smarty的模板。
所以,当我渲染topic-list.template.html
文件,我已经通过$smarty->fetch("string":$config['h1-titles']['topics'])
呈现$config['h1-titles']['topics']
第一,然后将其分配给h1
Smarty的变量。我的简化代码如下所示:
$h1_tag = $smarty->fetch("string":$config['h1-titles']['topics']);
$smarty->assign('h1', $h1_tag);
$smarty->display('topic-list.template.html');
我不知道如果我能以某种方式自动插入在topic-list.template.html
文件$config['h1-titles']['topics']
,然后在一个全力以赴渲染?
这也很酷。尤金还在他的评论中提出了“{eval}”。我会尝试你的方法,也是尤金的。我不确定哪一个是最好的,但如果他们都工作,我将不得不选择一个或另一个。 :) – bodacydo
好吧,'{eval}'工作。现在我要尝试'{include}'方法。我在想'{include}'可能会更好,因为它实际上是将字符串模板编译到一个文件中,所以Smarty每次看到它时都不会评估字符串! – bodacydo
该页面有一个注释:“使用字符串:资源类型时,每个唯一字符串会生成一个编译文件,Smarty无法检测到已更改的字符串,因此会为每个唯一字符串生成一个新的编译文件。选择正确的资源,这样就不会用浪费的编译字符串填充磁盘空间。“既然你在谈论可能会改变很多(标题)的字符串,eval看起来对我更有用。 – Eugene