Можно ли установить каталоги smarty в производном конструкторе? - PullRequest
0 голосов
/ 16 марта 2011

Эй, я пытаюсь сделать что-то вроде этого:

<?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'); работает.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 16 марта 2011

Вы можете использовать $this даже в контексте конструктора.Поэтому попробуйте:

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

Должно работать.

1 голос
/ 17 марта 2011

Шаблон dir может быть массивом, и это может быть сделано внутри. Также есть addTemplateDir (). Smarty пройдет их по порядку. Использование $ this-> является правильным подходом для конструктора.

0 голосов
/ 16 марта 2011

Вы уверены, что проблема в том коде? Я использую во всех своих приложениях код, подобный этому:

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";
(...)
...