2

每次包含 tpl 文件时,系统首先查找文件的特定于站点的版本,如果特定于站点的版本不存在,则回退到标准版本。所以我放的perahps包括“customer/main/test1.tpl”。如果我们的网站是 google,系统将首先查找“customer/main/google_test1.tpl”,如果该文件不存在,则回退到“customer/main/test1.tpl”。

注意:Smarty 2.6.x

4

1 回答 1

2

你知道内置的模板目录级联吗?addTemplateDirsetTemplateDir允许您指定多个目录:

$smarty->setTemplateDir(array(
  'google' => 'my-templates/google/',
  'default' => 'my-templates/default/',
));

$smarty->display('foobar.tpl');

Smarty 会先尝试查找my-templates/google/foobar.tpl,如果没有找到再尝试my-templates/default/foobar.tpl。使用它,您可以构建完整的模板级联。


如果您在同一级联级别上有很多元素,那将不会有太大帮助。假设除了 default.tpl 之外,您还有针对 google、yahoo 和 bing 的特定模板。解决方案可能涉及默认模板处理函数。每当 Smarty 遇到它找不到的模板时,作为最后手段执行此回调。它允许您指定一个模板文件(或模板资源)以用作后备。

所以你可以 {include}, {extend}, ->fetch(), ->display() site_google.tpl。如果文件存在,一切都很好。如果没有,您的回调可以替换_google_default回退到默认模板。


如果 template_dir 级联和默认模板处理函数似乎都不适用,您将需要深入研究自定义模板资源

于 2012-06-06T08:47:05.780 回答