我使用的代码点火器,该HMVC库 ,并与Smarty的这个库 。
Smarty的默认情况下工作正常,但是如果我尝试使用Smarty的继承特性( {extends file="master.tpl"}
那么我们遇到的问题。
该扩展功能不会在模块views文件夹寻找扩展文件(在上述的情况下master.tpl
),而不是仅看在application/views/
文件夹,并抛出一个错误,如果它不能找到它。
我可以添加APPPATH."modules/smartytest/views"
到$config['template_directory']
数组中的智者配置文件。 但抛出用于阵列中的它首先检查文件的每个项目的错误。 filemtime(): stat failed for application/views/master.tpl
和具有的附加问题,如果我有三个模块的所有阵列和模组都那么master.tpl不管我所说的模块扩展,从它会加载找到的第一个。
那么,有没有办法让Smarty的扩展功能与HMVC模块很好的表现?
嗯,找到了工作方案,
在My_Parser.php
在管线30编辑块,所以它读取:
// Modular Separation / Modular Extensions has been detected
if (method_exists( $this->CI->router, 'fetch_module' ))
{
$this->_module = $this->CI->router->fetch_module();
//add the current module view folder as a template directory
if ($this->_module !== '')
$this->CI->smarty->addTemplateDir(APPPATH."modules/".$this->_module.'/views');
}
这种方法的一个缺点是,智者会看在你的应用程序/视图的模块意见文件夹之前夹。 如果有人知道解决这一那么这将是梦幻般的。
问题是,CI不检查使用error_reporting()返回0,因为Smarty的使用@控制操作:所以在功能“_exception_handler”的顶部添加一行:
if (error_reporting() == 0) return;
要在“_exception_handler”功能(线469)的“的common.php”文件,或者在index.php文件调用“CodeIgniter.php”之前创建具有相同的名称自己的函数。
最好!
文章来源: Using Smarty 3, Code Igniter 2, and HMVC together with smarty's inheritance?