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"). 163行目から、表示を行う前smarty_internal_template.phpに の存在をチェックしているように見え$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

テンプレート dir は配列にすることができ、内部的にそれを行う可能性があります。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 に答える