要想自定义view文件夹的位置,首先要了解CI框架时如何加载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.php,然后在MY_Loader.php中修改$this->_ci_view_paths;

这里用一个小例子来说明:

我现在有一个网站,分为前台和后台,前台使用新的自定义view目录,定义在网站根目录下,命名为:D:/www/citest/view;

后台的view目录就使用默认的view目录,位置:/application/view 。

我们先在/application/core目录下新建一个MY_Loader.php文件:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Loader extends CI_Loader{ //开启新的视图目录
public function switch_view_on()
{
$this->_ci_view_paths = array(FCPATH . 'view/' =>true);
//print_r($this->_ci_view_paths);
}
//关闭新的视图目录
public function switch_view_off()
{
#just do nothing
}
}

然后在/application/core 目录下新建一个MY_Controller.php的 文件,然后写入两个类:

<?php
defined('BASEPATH') OR exit('No direct script access allowed'); //定义前台总控制器
class Home_Controller extends CI_Controller
{
public function __construct() {
parent::__construct();
#所有前台控制器都默认使用新的自定义视图目录
$this->load->switch_view_on();
}
} //定义后台总控制器
class Admin_Controller extends CI_Controller
{
public function __construct() {
parent::__construct();
#所有后台控制器都使用默认的视图目录
$this->load->switch_view_off();
}
}

疑点:为什么上述代码可以在Controller里面调用Loader类的方法呢?

答:因为CI中的CI_Controller控制器有一个特殊的名字,叫做超级控制器,这个超级控制器里面集中了很多类库,其中就包括Loader类,所以可以在控制器中直接调用Loader类的方法。关于这个超级控制器,这里不再赘述,只是做一个抛砖引玉,有兴趣的童鞋,可以自己研究研究。

---------到这里修改完成--------。

这样我们再写代码的时候,前台控制器就继承Home_Controller,当你使用$this->load->view()方法的时候,CI就会自动去加载你自定义的view目录下的视图文件。

后台控制器就继承Admin_Contoller,当你使用$this->load->view()方法的时候,CI就会加载默认的view目录下的视图文件。

并且前后台都有自己的父类控制器,以后可以在父类控制器里做一些权限控制的设置,也非常方便。

CI框架中自定义view文件夹位置的更多相关文章

  1. 对CI框架中几个文件libraries

    对CI框架中几个文件libraries,helpers,hooks夹说明 来源:未知    时间:2014-10-20 11:37   阅读数:117   作者:xbdadmin [导读] 1.lib ...

  2. 在一些开源框架中,dist文件夹是什么意思

    全称是distribution. distribution英 [dɪstrɪ'bjuːʃ(ə)n]美 ['dɪstrə'bjʊʃən]: 发行版 n. 分布:分配 在某些框架中,因为开发和发布是的内容 ...

  3. CI 框架中的自定义路由规则

    在 CI 框架中,一个 URL 和它对应的控制器中的类以及类中的方法是一一对应的,如: www.test.com/user/info/zhaoyingnan 其中 user 对应的就是控制器中的 us ...

  4. AIR 中的 File 对象 所访问的文件夹位置

    AIR 中的 File 对象 所访问的文件夹位置 Link 关于File.cacheDirectory的一点说明 According to the Apple guidelines, data tha ...

  5. Thinkphp框架中自定义修改success和error页面

    Thinkphp框架中自定义修改success和error页面 Thinkphp框架的默认success和error太难看,可以自定义设置,步骤如下: (注意:TP原框架中的success跳转有问题, ...

  6. 在CI框架中的配置整合amfphp

    之前做的项目用到CI框架和amfphp的整合,主要用于php与flex的交互,在此做一下记录: 一. 安装CI框架: 1.  搭建PHP运行环境,本人在WIN7下用WAMP作测试,安装目录:d:/wa ...

  7. 利用layui前端框架实现对不同文件夹的多文件上传

    利用layui前端框架实现对不同文件夹的多文件上传 问题场景: 普通的input标签实现多文件上传时,只能对同一个文件夹下的多个文件进行上传,如果要同时上传两个或多个文件夹下的文件,是无法实现的.这篇 ...

  8. js配置文件路径和项目目录文件夹位置的一致性

    在js文件引入的时候注意配置文件的路径是否和项目目录中的文件夹位置一致,如果不一致, 浏览器会指出找不到文件404的情况

  9. SQL Server Replication的分发服务器的快照文件夹位置查找

    SQL Server分发服务器配置中,需要配置快照文件夹(Snapshot Folder),用于存储发布的数据和架构文件的工作目录,那么如何查找当前SQL Server数据库服务器的分发服务器的快照文 ...

随机推荐

  1. 【原】理解Storm拓扑的并行

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...

  2. viedeo

    http://download.farsight.com.cn/download/Android.htm

  3. rtems总结

    rtems 历史背景及现状 常用的api 和参数介绍 rtems_interrupt_enable rtems_interrupt_is_in_progress rtems_cache_flush_r ...

  4. MapReduce之Partition的使用与分析

    Partition主要作用就是将map的结果发送到相应的reduce.这就对partition有两个要求: 1)均衡负载,尽量的将工作均匀的分配给不同的reduce. 2)效率,分配速度一定要快. M ...

  5. ubuntu源码安装R语言

    下载后解压完,进入开始配置: ./configure --enable-R-shlib 报错: configure: error: con--with-readline=yes (default) a ...

  6. Memcached使用笔记

    1.linux启动memcached命令 进入到memcached安装目录,可以用whereis memcached查看,默认安装在/usr/bin/目录下 输入以下命令,下面两行任选一行就可以了 m ...

  7. unigui下载文件

    lblProduct.Caption := '<a href="files\1.t" target=new>要下载的文件名</a>';

  8. [C语言 - 11] 语言编译执行

    使用gcc编译器 1.预编译 gcc -E Hello.c -o Hello.i 2.汇编 gcc -S Hello.i -o Hello.s   3.编译 gcc -c Hello.s -o Hel ...

  9. os7新特性之生成二维码

    先导入CoreImage.framework 生成二维码 读取二维码

  10. ST-Link 驱动安装

    电脑中可以预先安装一个ST Visual Programmer 这个直接带STLink驱动或是安装一个STM32 ST-Link Uitilty 然后选择自安安装 点出下一步 在弹出的对话框选择“仍然 ...