一.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目录下的视图文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,008评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • application:具体项目开发目录; system:CI框架代码; user_guide:用户手册,和实现无...
    依点矫情阅读 1,557评论 0 5
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 人生的道路远大而无尽头,但是每一个人总是越走越远,人生就像一只飞翔的鸟儿,总爱往上飞,而不是往下掉。而人生的道路更...
    解晓萍阅读 260评论 0 1