CodeIgniter & Smarty - 无法更改模板目录 - 桥接 smarty class 不会覆盖 setTemplateDir()

CodeIgniter & Smarty - can't change template dir - bridging smarty class doesn't overwrite setTemplateDir()

我正在尝试将 Smarty 添加到 CodeIgniter,以下是我执行的步骤:

  1. 已下载CI

  2. 已下载 Smarty 并将其内容放入 'application/third_party/smarty' 文件夹

  3. 在 'application/libraries'

    中创建了 'smarty.php' 文件
  4. 在 'application/views' 文件夹

    中创建了 'templates' & 'templates_c' 个文件夹
  5. 在 'application/views/templates' 文件夹中创建了简单的 'test.tpl' 文件

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

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

  7. 控制器里面写着$this->smarty->display('test.tpl';

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

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

这里是桥接class内容:

<?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 class 由于某种原因没有被执行,这就是为什么我的模板目录设置为默认值

另请注意,如果我直接进入 Smarty.class.php 并手动更改模板目录 - 一切正常

解决了问题 - 桥接 class 应该在 'system/libraries' 而不是 'application/libraries' 文件夹中。

问题是您需要加载扩展 smartyci_smarty 库,而不是直接加载 smarty

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

在你的控制器中,

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

重要

Please note that all native CodeIgniter libraries are prefixed with CI_ so DO NOT use that as your prefix.

尝试将库名称更改为 custom_smarty

最后但并非最不重要的

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

希望对你有用。

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

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

首先,请在控制器 __Consructor() 函数 上将 'ci_smarty' 对象克隆到 'smarty' $this->smarty = 克隆 $this->ci_smarty;