CI框架中自定义view文件夹位置
要想自定义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文件夹位置的更多相关文章
- 对CI框架中几个文件libraries
对CI框架中几个文件libraries,helpers,hooks夹说明 来源:未知 时间:2014-10-20 11:37 阅读数:117 作者:xbdadmin [导读] 1.lib ...
- 在一些开源框架中,dist文件夹是什么意思
全称是distribution. distribution英 [dɪstrɪ'bjuːʃ(ə)n]美 ['dɪstrə'bjʊʃən]: 发行版 n. 分布:分配 在某些框架中,因为开发和发布是的内容 ...
- CI 框架中的自定义路由规则
在 CI 框架中,一个 URL 和它对应的控制器中的类以及类中的方法是一一对应的,如: www.test.com/user/info/zhaoyingnan 其中 user 对应的就是控制器中的 us ...
- AIR 中的 File 对象 所访问的文件夹位置
AIR 中的 File 对象 所访问的文件夹位置 Link 关于File.cacheDirectory的一点说明 According to the Apple guidelines, data tha ...
- Thinkphp框架中自定义修改success和error页面
Thinkphp框架中自定义修改success和error页面 Thinkphp框架的默认success和error太难看,可以自定义设置,步骤如下: (注意:TP原框架中的success跳转有问题, ...
- 在CI框架中的配置整合amfphp
之前做的项目用到CI框架和amfphp的整合,主要用于php与flex的交互,在此做一下记录: 一. 安装CI框架: 1. 搭建PHP运行环境,本人在WIN7下用WAMP作测试,安装目录:d:/wa ...
- 利用layui前端框架实现对不同文件夹的多文件上传
利用layui前端框架实现对不同文件夹的多文件上传 问题场景: 普通的input标签实现多文件上传时,只能对同一个文件夹下的多个文件进行上传,如果要同时上传两个或多个文件夹下的文件,是无法实现的.这篇 ...
- js配置文件路径和项目目录文件夹位置的一致性
在js文件引入的时候注意配置文件的路径是否和项目目录中的文件夹位置一致,如果不一致, 浏览器会指出找不到文件404的情况
- SQL Server Replication的分发服务器的快照文件夹位置查找
SQL Server分发服务器配置中,需要配置快照文件夹(Snapshot Folder),用于存储发布的数据和架构文件的工作目录,那么如何查找当前SQL Server数据库服务器的分发服务器的快照文 ...
随机推荐
- jquery日历datepicker的使用方法
jquery.ui.datepicker.js 用法: http://blog.csdn.net/zb0567/article/details/7906238 原文 http://blog.cs ...
- Poj 1163 The Triangle 之解题报告
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42232 Accepted: 25527 Description 7 3 ...
- IRP_MJ_CREATE
原文链接:http://laokaddk.blog.51cto.com/368606/125553/ MSDN:https://msdn.microsoft.com/library/windows/h ...
- class0513(html基础加强)
内容:HTML.CSS 目标:掌握手写HTML实现一般难度的Web页面的能力(如网站注册表单),为ASP.Net学习打基础.坚持手写HTML,可视化设计只是一种自学的手段. 参考书:张孝祥<Ja ...
- Leetcode OJ : Evaluate Reverse Polish Notation Stack C++ solution
#define ADDITION '+' #define SUBSTRACTION '-' #define MULTIPLICATION '*' #define DIVISION '/' class ...
- 一键生成HTML4和WAP站
前两天在QQ空间上提到微信上线风铃时,把其中的HTML5错打成HTML4,结果发现很多媒体微博照着转载,依旧说成 "一键生成HTML4和WAP站",这就是转载不注明出处.不署名.不 ...
- HW5.34
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- HDU 5710 Digit-Sum (构造)
题意: 定义S(N) 为数字N每个位上数字的和.在给两个数a,b,求最小的正整数n,使得 a×S(n)=b×S(2n). 官方题解: 这道题目的结果可能非常大,所以我们直接枚举n是要GG的. 首先可以 ...
- 了解CSS/CSS3原生变量var
一.变量是个好东西 在任何语言中,变量的有一点作用都是一样的,那就是可以降低维护成本,附带还有更高性能,文件更高压缩率的好处. 随着CSS预编译工具Sass/Less/Stylus的关注和逐渐流行,C ...
- iOS OC语言: Block底层实现原理 (转载)
作者:Liwjing 地址:http://www.jianshu.com/users/8df89a9d8380/latest_articles 先来简单介绍一下Block Block是什么? 苹果推荐 ...