用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4461|回复: 6
收起左侧

[初级] 【学习笔记】扩展核心系统类!

[复制链接]
发表于 2012-7-3 21:50:42 | 显示全部楼层 |阅读模式
纯属小白,对扩展核心系统类具体能有多少好处也说不出来,但就目前认知感觉自己扩展的核心系统类,可以把一些通用的方法写在自己的类里面,方便快捷使用。

下面共享一下今天的学习成果,一边是手册一边是dilicms。感谢dilicms作者提供这么好的源码。

本人小白菜一个,文中如有不对,请各位大神拍砖指教

一、扩展核心系统类文件必须存放于【application\core】目录下。

二、建立你的核心系统类文件 如“Talent_Controller.php”;必须以XX_为前缀,切不能为CI_。

三、打开 application/config/config.php 修改 $config['subclass_prefix'] = 'MY_'; 为你的前缀。

四、Talent_Controller.php内容的编写:

PHP复制代码
 
//Talent_Controller 继承CI_Controller 这样一个名为Talent_Controller的扩展核心类就形成了
abstract class Talent_Controller extends CI_Controller
{
    some codes...
}
 
复制代码


五、可以写多个类来分别应用如前台和后台,上面我们定义了一个Talent_Controller全站通用,接下来再分别定义两个类分别应用于前台和后台。

PHP复制代码
 
//前台类,Home_Controller 继承Talent_Controller(也就继承了CI_Controller)
abstract class Home_Controller extends Talent_Controller
{
    some codes...
}
//后台类,Admin_Controller 继承Talent_Controller
abstract class Admin_Controller extends Talent_Controller
{
    some codes...

 
复制代码


六、使用扩展核心类只需在你的控制器里面只要 extends Admin_Controller  或者  Home_Controller 或者 Talent_Controller 就可以了。

七、简单应用:
A:后台检测是否登录,如未登录跳转到登录界面;后台所有控制器都继承Admin_Controller。
具体代码如下:
PHP复制代码
 
abstract class Admin_Controller extends Talent_Controller
 {
 
  //构造函数
  function __construct()
  {
   parent::__construct();
   $this->load->library('session'); //后台所有地方都会用到Session所以这里载入Session类库
   $this->_check_login();//所有页面都需要检测是否登录
  }
 
  function _check_login()
  {
   if(! $this->session->userdata('uid'))
   {  
    //如果没登陆则跳转到登录界面,_message方法是我自定义的,后面会提出。
    $this->_message('对不起,您暂未登录!','admin/login',true);
   }
  }
 }
 
复制代码

如上代码,你所有的后台页面控制器只要继承Admin_Controller就都会自动检测是否已经登录,不用每个页面都检测是否登录了,Session类库也都自动加载了。

B、通用信息提示功能,大部分网站都有信息提示页面用来提示用户,如操作成功,操作失败,等提示。
具体代码如下:
PHP复制代码
 
 abstract class Talent_Controller extends CI_Controller
 {
 
  function __construct()
  {
   parent::__construct();
  }
 
  /*
   通用信息提示
   $msg - 提示文字
   $goto - 跳转路径(如为空为上一页路径)
   $auto - 是否自动跳转
  */

  function _message($msg, $goto = '',$auto = true)
  {
   if($goto == '')
   {
    //三元运算,$_SERVER['HTTP_REFERER']是父页面地址,如果有父页面地址,则$goto就是父页面地址
    //如果没有父页面地址则$goto就是site_url()
    $goto = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : site_url();
   }
   else
   {
    $goto = site_url($goto);
   }
   $this->load->view('sys_message',array('msg'=>$msg,'goto'=>$goto,'auto'=>$auto));
   echo $this->output->get_output();
   exit();
  }
     
 }
 
复制代码


这就是今天的学习成功,希望对跟我一样的新手有些帮助,欢迎老鸟拍砖指教!

评分

参与人数 1威望 +1 收起 理由
浪迹天涯 + 1 赞一个!

查看全部评分

发表于 2012-7-3 23:34:47 | 显示全部楼层
基本上是这样的
发表于 2012-7-4 16:56:08 | 显示全部楼层
是的,没错
十分支持楼主把学习到的拿出了共享,以帮助更多的人
 楼主| 发表于 2012-7-4 22:38:44 | 显示全部楼层
第一次发帖啊,感谢楼上两位,但是还是有很多人看帖不回帖啊。。。。

给点鼓励啊,不然以后怎么接着发啊。。。。。。。

尤其是听说论坛有个H老大,是不是看我的笔记太垃圾懒的回呢
发表于 2012-7-19 21:49:36 | 显示全部楼层
本帖最后由 viqecel 于 2012-7-19 21:50 编辑
PHP复制代码
 function _check_login()
  {
   if(! $this->session->userdata('uid'))
   {  
    //如果没登陆则跳转到登录界面,_message方法是我自定义的,后面会提出。
    $this->_message('对不起,您暂未登录!','admin/login',true);
   }
  }
复制代码


上面有uid 就是自动读取的序列的一个键名吧.感觉来得太突然
 楼主| 发表于 2012-7-19 22:54:33 | 显示全部楼层
viqecel 发表于 2012-7-19 21:49
上面有uid 就是自动读取的序列的一个键名吧.感觉来得太突然

我就是没把login页面写出来 login页面当登录成功的时候会写入session  uid这个值

呵呵 这样你懂了吧~
发表于 2012-8-7 12:39:19 | 显示全部楼层
对于新手是好贴,顶。。。

本版积分规则