<?php
class MySmarty extends Smarty {
public function __construct() {
parent::__construct();
$smartyRoot = '/home/smarty/';
parent::setTemplateDir($smartyRoot. "/templates/");
parent::setCompileDir($smartyRoot."/templates_c/");
parent::setCacheDir($smartyRoot."/cache/");
parent::setConfigDir($smartyRoot."/configs/");
}
}
$smarty = new MySmarty();
$smarty->display("index.tpl");
?>
但它以SmartyException("Unable to load template file")
失败了。从smarty_internal_template.php
第163行开始,看起来它会在进行任何显示之前检查是否存在$this
。
我的系统似乎设置正确,因为建议的方法(调用$smarty->set*Dir($smartyRoot.'foo');
)有效。
有什么想法吗?
答案 0 :(得分:3)
即使在构造函数的上下文中,也可以使用$this
。所以试试:
$this->setTemplateDir($smartyRoot. "/templates/");
$this->setCompileDir($smartyRoot."/templates_c/");
$this->setCacheDir($smartyRoot."/cache/");
$this->setConfigDir($smartyRoot."/configs/");
应该工作。
答案 1 :(得分:1)
模板目录可以是一个数组,也可以在内部执行。还有addTemplateDir()。 Smarty将按顺序遍历它们。使用$ this-&gt;是构造函数的正确方法。
答案 2 :(得分:0)
您确定问题来自该代码吗?我在我的所有应用程序代码中使用这样的代码:
class MySmarty extends Smarty {
function __construct() {
global $path, $template_dir, $production;
parent::__construct();
$this->template_dir = $template_dir;
$this->compile_dir = "$template_dir/tpl_c";
$this->config_dir = "$template_dir/configs";
$this->cache_dir = "$template_dir/cache";
(...)