Hey, I'm trying to do something like this:
<?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");
?>
But it fails with a SmartyException("Unable to load template file")
. From smarty_internal_template.php
line 163, which looks like it checks for the existence of $th开发者_Go百科is
before doing any display.
My system seems to be set up correctly, since the suggested way of doing it (calling $smarty->set*Dir($smartyRoot.'foo');
works.
Any ideas?
You can use $this
even in context of the constructor. So try:
$this->setTemplateDir($smartyRoot. "/templates/");
$this->setCompileDir($smartyRoot."/templates_c/");
$this->setCacheDir($smartyRoot."/cache/");
$this->setConfigDir($smartyRoot."/configs/");
Should work.
The template dir can be an array, and it might internally do that. There is also addTemplateDir(). Smarty will traverse them in order. Using $this-> is the correct approach for the constructor.
Are you sure the problem is from that code? I use in all my apps code like this:
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";
(...)
精彩评论