我可以让Smarty根据优先级从目录中选择一个模板吗?

时间:2012-06-16 23:13:17

标签: php templates smarty

我正在制作一个PHP wiki引擎,它为所有指向它的网站使用相同的模板。但是有些网站有自定义模板。我可以让Smarty使用这个自定义模板吗?

这是我的目录结构:

/web/wiki/templates                 <--  all templates here
/web/wiki/templates/wiki.domain.com <-- individual template

如何在/web/wiki/templates/wiki.domain.comwiki.domain.com首先使用/web/wiki/templates模板,如果此目录中不存在该模板,请使用/web/wiki/templates/wiki.domain.com /web/wiki/templates 中的模板?

我可以为Smarty定义多个模板目录,并让它首先尝试从顶层目录中选择模板吗?如果我能做到这一点,我可以简单地改变模板目录的顺序:

{{1}}

4 个答案:

答案 0 :(得分:1)

default_template_handler是在无法找到模板时调用的回调函数。一些“示例”可以在unit test

中找到

答案 1 :(得分:1)

Smarty Docs开始,尝试:

// set multiple directoríes where templates are stored
$smarty->setTemplateDir(array(
    'one'   => './templates',
    'two'   => './templates_2',
    'three' => './templates_3',
));

答案 2 :(得分:0)

我认为你不能在不同的模板上设置优先权,但我不确定。您可以做的是检查是否存在特定模板:

// check for if a special template exists
$template = 'default.tpl.php';
if ($smarty->template_exists('example.tpl.php')) {
   $template = 'example.tpl.php';
}
// render the template
$smarty->display($template);

答案 3 :(得分:0)

要扩展Krister的代码,如果你有很多可能的模板:

$possibleTemplates = array(
    // ...
);

do {
    $template = array_shift($possibleTemplates);
} while($template && !$smarty->template_exists($template));

if(!$template) {
    // Handle error
}

$smarty->display($template);