0

嘿,我正在尝试做这样的事情:

<?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');工作。

有任何想法吗?

4

3 回答 3

3

$this甚至可以在构造函数的上下文中使用。所以试试:

    $this->setTemplateDir($smartyRoot. "/templates/");
    $this->setCompileDir($smartyRoot."/templates_c/");
    $this->setCacheDir($smartyRoot."/cache/");
    $this->setConfigDir($smartyRoot."/configs/");

应该管用。

于 2011-03-16T18:30:06.807 回答
1

模板目录可以是一个数组,它可能在内部这样做。还有 addTemplateDir()。Smarty 将按顺序遍历它们。使用 $this-> 是构造函数的正确方法。

于 2011-03-17T16:39:44.163 回答
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";
(...)
于 2011-03-16T18:32:39.367 回答