要想自定义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. 第一章 Lambda表达式

    1.1 Why Lambdas? 当你操作多线程的时候,你会像下面这样将要处理的代码放到run()函数中: class Worker implements Runnable { public void ...

  2. Zabbix探索:LDAP的认证方式

    这两天部署了Zabbix测试环境,终于用Puppet部署完成了.总是存在一些小问题,如服务不起动啦之类的. LDAP验证方式配置 刚刚配置Zabbix的用户管理,使用LDAP方式认证. 比较惊喜的是L ...

  3. jquery选择器返回值

    jquery选择器$('selector')返回的不是数组,而是封装好的jquery对象.但这个对象有一个特别的地方,就是查询到的节点被以下标为属性,添加到了jquery对象上,所以它看起来像数组,因 ...

  4. 【原】Storm 守护线程容错机制

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

  5. 进程隐藏与进程保护(SSDT Hook 实现)(一)

    读了这篇文章终于明白大致怎么回事了 文章目录:                   1. 引子 – Hook 技术: 2. SSDT 简介: 3. 应用层调用 Win32 API 的完整执行流程: 4 ...

  6. Tasks on 2013

    1.改进并补充实验 2.样本选取和文档分布调查 3. Diversity Metrics 4. PPT for Project starting 1. Chrome & webkit 2. O ...

  7. 基于adt-bundle的Android开发环境搭建

    web与移动是当今的热门,怎么说都得会一点,完全不懂是不行的. 一直想玩一下移动开发,穷屌丝暂时没有iPhone和Mac,所以先拿Android开刀. 之前也有想过玩一下Android,但是都被各种博 ...

  8. jetty上传 Form too large: 275782 > 200000

    1,找到jetty服务器下的jetty.xml,在 <Configure id="Server" class="org.eclipse.jetty.server.S ...

  9. leetcode@ [36/37] Valid Sudoku / Sudoku Solver

    https://leetcode.com/problems/valid-sudoku/ Determine if a Sudoku is valid, according to: Sudoku Puz ...

  10. HDU-4716 A Computer Graphics Problem 水题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4716 直接搞.. //STATUS:C++_AC_0MS_288KB #include <fun ...