tlerbao 发表于 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内容的编写:


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


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


//前台类,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。
具体代码如下:

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、通用信息提示功能,大部分网站都有信息提示页面用来提示用户,如操作成功,操作失败,等提示。
具体代码如下:

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();
}
   
}


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

太尉天上飞 发表于 2012-7-3 23:34:47

基本上是这样的:$

浪迹天涯 发表于 2012-7-4 16:56:08

是的,没错
十分支持楼主把学习到的拿出了共享,以帮助更多的人

tlerbao 发表于 2012-7-4 22:38:44

第一次发帖啊,感谢楼上两位,但是还是有很多人看帖不回帖啊。。。。

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

尤其是听说论坛有个H老大,是不是看我的笔记太垃圾懒的回呢

viqecel 发表于 2012-7-19 21:49:36

本帖最后由 viqecel 于 2012-7-19 21:50 编辑

function _check_login()
{
   if(! $this->session->userdata('uid'))
   {   
    //如果没登陆则跳转到登录界面,_message方法是我自定义的,后面会提出。
    $this->_message('对不起,您暂未登录!','admin/login',true);
   }
}

上面有uid 就是自动读取的序列的一个键名吧.感觉来得太突然

tlerbao 发表于 2012-7-19 22:54:33

viqecel 发表于 2012-7-19 21:49 static/image/common/back.gif
上面有uid 就是自动读取的序列的一个键名吧.感觉来得太突然

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

呵呵 这样你懂了吧~

mackxu 发表于 2012-8-7 12:39:19

对于新手是好贴,顶。。。
页: [1]
查看完整版本: 【学习笔记】扩展核心系统类!