Codeigniter& Smarty - 不能更改模板目录 - 桥接smarty类并不会覆盖setTemplateDir()

时间:2015-04-26 20:30:41

标签: php codeigniter templates smarty

我正在尝试将Smarty添加到Codeigniter,这是我做的步骤:

1)下载CI

2)下载Smarty并将其内容放入&application; / third_party / smarty'夹

3)创建' smarty.php'在' application / libraries'

中输入文件

4)创建模板' &安培; ' templates_c'文件夹内的'应用程序/视图'夹

5)创建简单的test.tpl'在' application / views / templates'中输入文件夹

6)打开' autoload.php'在' application / config'文件夹并添加:

$autoload['libraries'] = array('smarty');

7)在控制器内写了$this->smarty->display('test.tpl';

我收到此错误 - Message: Unable to load template file 'test.tpl'

经过一些调试后,我注意到我的Smarty模板目录设置为默认值,而不是桥接类中指定的那个(' application / libraries / smarty.php')

以下是桥接类内容:

<?php

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

require_once(APPPATH.'third_party/smarty/Smarty.class.php');

class CI_Smarty extends Smarty {

    function __construct()
    {
        parent::__construct();
        // NOT Changig this for some reason
        $this->setTemplateDir(APPPATH.'views/templates/');   
        $this->setCompileDir(APPPATH.'views/templates_c/');
    }

}

我认为CI_Smarty类由于某种原因没有被执行,这就是为什么我的模板目录被设置为默认值

还要注意,如果我直接进入Smarty.class.php并手动更改模板目录 - 一切都会正常工作

找出问题 - 桥接课应该在系统/图书馆&#39;而不是在应用程序/库中#39;文件夹中。

2 个答案:

答案 0 :(得分:1)

问题是您需要加载ci_smarty扩展smarty而不是smarty的库。

$autoload['libraries'] = array('ci_smarty');

在你的控制器中,

$this->ci_smarty->display('test.tpl');

重要

  

请注意,所有本机CodeIgniter库都以。为前缀   CI_所以不要将它用作你的前缀。

尝试将库名更改为custom_smarty

最后但并非最不重要

不要因任何原因触摸系统目录,永远不要。这不是最好的做法。您可以轻松地在application/libraries目录中创建新库或扩展现有库。

希望它对你有用。

答案 1 :(得分:0)

此外,如果您喜欢或需要使用

$这 - &GT; smarty-&GT;显示器(&#39; test.tpl&#39);

首先,请点击&#39; ci_smarty&#39;反对&#39; smarty&#39;在Controller __Consructor()函数上 $ this-&gt; smarty = clone $ this-&gt; ci_smarty;