沫音十三 发表于 2014-3-22 04:05:14

dilicms代码全面剖析(1),持续更新中。。。

本帖最后由 沫音十三 于 2014-3-22 06:04 编辑

事实上,我算不上一个称职的程序猿,也并不是CodeIgniter的粉丝,更没有加入完善dilicms的能力和心态。我仅仅是写了多年的程序后发现,程序的世界太小了,我更喜欢人际交流的环境,所以毅然决然地踏上了网络运营的方向。当老板担心国内知名cms的版权问题时,我翻出了dilicms,因为我不喜欢重复造轮子,对于一个新项目而言,市场机会远比程序本身来得重要。本来预计一个月的开发计划,我用10个工作日就完成了。当然,对于熟悉dilicms的人来说,我觉得3天就足够了。所以我很感谢作者提供了这样的代码,并让我有更多的时间投身在运营学习中。本来打算很正经地用chm手册的形式做一个比较全的使用说明出来,之后想想,我应该只领悟了dilicms的皮毛,所以想用帖子的形式不断完善,等完善的差不多了再生成chm文档。其实,作者开放这个作品的本意,应该是想让程序猿们更加关注核心功能的实现,而不是做机械性码农。可浏览了板块的帖子,很多人却在问怎么使用。说实话,我也花了一两天时间研究用法。但我最终发现,dilicms的模块管理和插件什么的扩展性很强大,但最精髓的,觉得是作者对CI框架的理解和运用,是应该用“哇”、“牛”、“妙”、“崇拜”这样的字眼去形容的。
所以我不打算用专题讲界面的操作,而是像一个程序猿一样,去剖析每一段代码的作用,再从代码逻辑上去讲界面的操作,我觉得这样会让大家更加深入地了解和灵活运用dilicms。


下面代码块中用"#"注释的文字内容,是我对dilicms的理解,有理解偏差的地方,请大家雅正!


//------------第一步:咱们就从 /admin/index.php 开始吧,其实这个文件也没啥可说的,就是多了一句代码-----------

/*
* --------------------------------------------------------------------
* 加载DiliCMS 环境常量
* --------------------------------------------------------------------
*/      
require_once BASEPATH . '../' . 'shared/config/constant.php';


//------------第二步: /shared/config/constant.php,一些自定义的常量-----------

/*--------------------------------------------------------------------------
| DiliCMS 环境常量
|--------------------------------------------------------------------------
*/
    define('IN_DILICMS', TRUE);    #检查单一入口用

    define('DILICMS_VERSION', 'V2.3.0');   #版本号,这个没什么用,仅仅在安装程序时用到了

    define('DILICMS_SHARE_PATH', BASEPATH . '../shared/');    #指定shared绝对路径,这个目录其实上就是把CI默认application下自定义的公用文件,如配置项、函数、类库、模型、数据缓存等文件搬到了这里

    define('DILICMS_EXTENSION_PATH', BASEPATH . '../extensions/');   #指定extensions绝对路径,这个目录一般放模型字段扩展或者模型内容功能扩展的文件


//------------第三步: /admin/core/Dili_Loader.php,把CI默认的视图路径改成了/admin/templates/default/----------

/** * DiliCMS Loader 扩展CI_Loader,用于支持多皮肤
*/
class Dili_Loader extends CI_Loader
{
    /**
   * 切换视图路径
   */
      public function switch_theme($theme = 'default')
      {
                $this->_ci_view_paths = array(APPPATH . 'templates/' . $theme . '/' => TRUE);    #这一句其实就是把$this->load->view()的默认路径改掉了,改成了/admin/templates/default/。这样就可以通过后台界面随时切换不同风格的前台模板了
      }
}


//------------第四步: /admin/core/Dili_Controller.php,在控制器基类初始化时就完成了每个页面几乎都要有的相同处理,使得模块控制器只专注于功能的具体实现---------

/**
* DiliCMS 后台控制器基类
*/               
abstract class Admin_Controller extends CI_Controller
{
    /**
   * 检查http auth
   */
    protected function _check_http_auth()    #利用超全局变量对当前用户名和密码进行权限访问效检

    /**
   * 检查用户是否登录
   */
   protected function _check_login()

    /**
   * 加载视图
   */
   protected function _template($template, $data = array())    #加载后台页面的公共头部

    /**
   * 检查权限
   */
      protected function _check_permit($action = '', $folder = '')    #检查当前用户有无当前操作权限

    /**
   * 信息提示
   */
      public function _message($msg, $goto = '', $auto = TRUE, $fix = '', $pause = 3000)   #错误或提示信息时的中转页面,自动跳转

}


//------------第五步: /admin/config/hooks.php,/admin/hooks/MethodHook.php -----------

/*| -------------------------------------------------------------------------
| pre_controller 钩子
| -------------------------------------------------------------------------
| 此钩子使用于处理POST请求的函数只能通过POST请求访问
*/
$hook['pre_controller'] = array(   #在配置项中定义一个钩子,在控制器基类初始化之前就执行
         'class'    => 'MethodHook',
         'function' => 'redirect',
         'filename' => 'MethodHook.php',
          'filepath' => 'hooks'
         );
class MethodHook
{
    /**
   * 将POST请求的方法method变成_method_post。
   */      
      public function redirect()   #为了安全,将非get请求的操作通通挂载到私有操作上,以禁止url访问
}


//----------------------------------上面是核心代码的初始化,剩下的就是具体功能上的代码了,有时间继续更新---------------------------------------------

帝国设计师 发表于 2015-11-26 14:58:05

确实不错

57sy.com(隐身中 发表于 2014-10-16 12:00:42

楼主咋不更新了呢!!!!

steptt 发表于 2014-8-21 11:12:52

期待续集{:1_1:}

labazi 发表于 2014-6-21 15:40:21

等待更新

孤屌一丝 发表于 2014-6-9 17:09:16

这快3个月了,怎么还不更新?

乌啦啦乌啦啦 发表于 2014-5-9 15:18:59

很不错,学习了。

东檀 发表于 2014-4-16 16:46:17

留下 慢慢看

水木清华 发表于 2014-4-15 11:26:05

分析的不错,期待更多分享~

xxxrhong 发表于 2014-3-31 11:32:05

现在就是内容太少了,期待更多的更新……
页: [1] 2
查看完整版本: dilicms代码全面剖析(1),持续更新中。。。