1

我遇到了一个有趣的问题。我需要在 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文件时,我必须先渲染$config['h1-titles']['topics']通过$smarty->fetch("string":$config['h1-titles']['topics']),然后将其分配给h1Smarty 变量。我的简化代码如下所示:

$h1_tag = $smarty->fetch("string":$config['h1-titles']['topics']);
$smarty->assign('h1', $h1_tag);
$smarty->display('topic-list.template.html');

我想知道我是否可以以某种方式自动将其插入文件$config['h1-titles']['topics']topic-list.template.html,然后一次性全部渲染?

4

2 回答 2

2

请查看String Template Resources上的文档。您会立即注意到您的$smarty->fetch('string:…')方法也可以在模板中完成:{include file="string:…"}

于 2012-06-17T08:25:06.633 回答
1

我相信{eval}标签可以帮助你:

{eval} 用于评估作为模板的变量。这可用于将模板标签/变量嵌入到变量中或将标签/变量嵌入到配置文件变量中。

http://www.smarty.net/docs/en/language.function.eval.tpl

于 2012-06-17T07:18:49.770 回答