Php 如何使用Smarty模板中的Smarty模板?

Php 如何使用Smarty模板中的Smarty模板?,php,templates,smarty,templating,Php,Templates,Smarty,Templating,我遇到了一个有趣的问题。我需要在Smarty模板中使用Smarty模板 这就是原因。我对各种wiki网站使用相同的模板,每个网站都有自己的配置。配置包含主模板的部分(如更改的标题和标题等) 这里是一个简化的例子。我有一个文件topic list.template.html,可在所有网站共享: <div id="topics"> <h1>{$h1}</h1> ... </div> 如您所见,配置文件包含Smarty模板 因此,当我呈现主题列

我遇到了一个有趣的问题。我需要在Smarty模板中使用Smarty模板

这就是原因。我对各种wiki网站使用相同的模板,每个网站都有自己的配置。配置包含主模板的部分(如更改的标题和标题等)

这里是一个简化的例子。我有一个文件
topic list.template.html
,可在所有网站共享:

<div id="topics">
  <h1>{$h1}</h1>
  ...
</div>
如您所见,配置文件包含Smarty模板

因此,当我呈现
主题列表.template.html
文件时,我必须首先通过
$smarty->fetch(“字符串”)
呈现
$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');

我想知道我是否可以在
主题列表.template.html
文件中自动插入
$config['h1-titles']['topics']
,然后一次完成所有渲染?

我相信{eval}标记可以帮助您:

{eval}用于将变量作为模板进行求值。这可以用于将模板标记/变量嵌入变量或将标记/变量嵌入配置文件变量


请看一下屏幕上的文档。您会立即注意到,您的
$smarty->fetch('string:…')
方法也可以在模板中完成:
{include file=“string:…”}

很好地找到了Eugene。我要试试看!尤金,看看@rodneyrehm评论中的讨论。这是
{eval}
{include}
的对比。这也很酷。尤金在他的评论中也提出了
{eval}
。我试试你的方法,也试试尤金的方法。我不确定哪一个是最好的,但如果它们都有效,我将不得不选择其中一个好的,
{eval}
可以工作。现在我将尝试
{include}
方法。我认为
{include}
可能更好,因为它实际上是将字符串模板编译成一个文件,这样Smarty就不会在每次看到字符串时都计算它了!该页上有一条注释:“使用字符串:资源类型,每个唯一字符串生成一个编译文件。Smarty无法检测到已更改的字符串,因此将为每个唯一字符串生成一个新的编译文件。选择正确的资源非常重要,这样您就不会用浪费的编译字符串填充磁盘空间。”。因为你说的字符串可能会改变很多(标题),所以eval看起来对我更有用。很好找到@Eugene。也许使用
{eval}
更好,毕竟<代码>{include file=“eval:…”}完成相同的任务。请注意,编译模板(eval在每次调用时都这样做)非常昂贵。除非您实际面临大量(相当小)文件的问题,否则我不会太担心这个问题。但真正的问题是:您是否在使用缓存以及实际执行评估的频率。如果您正在缓存,eval可能不会太有害…
$h1_tag = $smarty->fetch("string":$config['h1-titles']['topics']);
$smarty->assign('h1', $h1_tag);
$smarty->display('topic-list.template.html');