CI(Codeigniter)框架自定义视图文件位置

你想自定义view的文件位置,则需要了解CI框架如何加载view视图文件的。

$this->load->view(); 这行代码的原理是什么?

我们打开application/core/Loader.php,里面有一个这样的方法:


    public function add_package_path($path, $view_cascade = TRUE) { $path = rtrim($path, '/').'/'; array_unshift($this->_ci_library_paths, $path); array_unshift($this->_ci_model_paths, $path); array_unshift($this->_ci_helper_paths, $path); //这一行代码就是加载view的操作,你想自定义则修改即可。 $this->_ci_view_paths = array($path.'views/' => $view_cascade) + $this->_ci_view_paths; // Add config file path $config =& $this->_ci_get_component('config'); $config->_config_paths[] = $path; return $this; } 

但本着可扩展性的原则,我们不去修改源代码,而是使用继承的原则来解决这个问题:

方法:自定义一个MY_Loader.php类继承自Loader,然后在方法中修改$this->_ci_view_paths;

案例如下:
有一个网站,分前后台,前台的目录使用自定义的目录,后台使用默认的application/views/下的文件。
首先在/application/core/下定义一个MY_Loader.php文件:

class MY_Loader extends CI_Loader { protected $_theme = 'default/'; #开启新的视图目录,调用$this->load->view()时,则调用themes/default/下的view文件 public function switch_themes_on() { $this->_ci_view_paths = array(FCPATH . THEMES_DIR . $this->_theme => true); } #关闭新的试图目录,调用$this->load->view()时,则调用application/views/下的view文件 public function switch_themes_off() { //just do nothing } } 

其次,在/application/core/中自定义一个控制类MY_Controller.php继承自CI_Controller类,

//前台控制器
class Home_Controller extends CI_Controller{ public function __construct() { parent::__construct(); #开启新视图文件 $this->load->switch_themes_on(); } } //后台控制器 class Admin_Controller extends CI_Controller{ public function __construct() { parent::__construct(); #关闭新视图文件 $this->load->switch_themes_off(); } } 

最后,当你编写前台代码时,控制器继承Home_Controller,则加载视图时会自动加载application/themes/default中的view文件。 后台控制器则继承Admin_Controller,当你使用$this->load->view()方法的时候,CI就会加载默认的view目录下的视图文件。



作者:于阗
链接:https://www.jianshu.com/p/0dbe866fbef5
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/gaogaoxingxing/p/10845673.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值