CodeIgniter & Smarty - 无法更改模板目录 - 桥接 smarty class 不会覆盖 setTemplateDir()
CodeIgniter & Smarty - can't change template dir - bridging smarty class doesn't overwrite setTemplateDir()
我正在尝试将 Smarty 添加到 CodeIgniter,以下是我执行的步骤:
已下载CI
已下载 Smarty 并将其内容放入 'application/third_party/smarty' 文件夹
在 'application/libraries'
中创建了 'smarty.php' 文件
在 'application/views' 文件夹
中创建了 'templates' & 'templates_c' 个文件夹
在 'application/views/templates' 文件夹中创建了简单的 'test.tpl' 文件
在 'application/config' 文件夹中打开 'autoload.php' 并添加:
$autoload['libraries'] = array('smarty');
控制器里面写着$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' 文件夹中。
问题是您需要加载扩展 smarty
的 ci_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;
我正在尝试将 Smarty 添加到 CodeIgniter,以下是我执行的步骤:
已下载CI
已下载 Smarty 并将其内容放入 'application/third_party/smarty' 文件夹
在 'application/libraries'
中创建了 'smarty.php' 文件在 'application/views' 文件夹
中创建了 'templates' & 'templates_c' 个文件夹在 'application/views/templates' 文件夹中创建了简单的 'test.tpl' 文件
在 'application/config' 文件夹中打开 'autoload.php' 并添加:
$autoload['libraries'] = array('smarty');
控制器里面写着
$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' 文件夹中。
问题是您需要加载扩展 smarty
的 ci_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;