本帖最后由 沫音十三 于 2014-3-22 06:04 编辑
事实上,我算不上一个称职的程序猿,也并不是CodeIgniter的粉丝,更没有加入完善dilicms的能力和心态。我仅仅是写了多年的程序后发现,程序的世界太小了,我更喜欢人际交流的环境,所以毅然决然地踏上了网络运营的方向。当老板担心国内知名cms的版权问题时,我翻出了dilicms,因为我不喜欢重复造轮子,对于一个新项目而言,市场机会远比程序本身来得重要。本来预计一个月的开发计划,我用10个工作日就完成了。当然,对于熟悉dilicms的人来说,我觉得3天就足够了。所以我很感谢作者提供了这样的代码,并让我有更多的时间投身在运营学习中。 本来打算很正经地用chm手册的形式做一个比较全的使用说明出来,之后想想,我应该只领悟了dilicms的皮毛,所以想用帖子的形式不断完善,等完善的差不多了再生成chm文档。 其实,作者开放这个作品的本意,应该是想让程序猿们更加关注核心功能的实现,而不是做机械性码农。可浏览了板块的帖子,很多人却在问怎么使用。说实话,我也花了一两天时间研究用法。但我最终发现,dilicms的模块管理和插件什么的扩展性很强大,但最精髓的,觉得是作者对CI框架的理解和运用,是应该用“哇”、“牛”、“妙”、“崇拜”这样的字眼去形容的。
所以我不打算用专题讲界面的操作,而是像一个程序猿一样,去剖析每一段代码的作用,再从代码逻辑上去讲界面的操作,我觉得这样会让大家更加深入地了解和灵活运用dilicms。
下面代码块中用"#"注释的文字内容,是我对dilicms的理解,有理解偏差的地方,请大家雅正!
//------------第一步:咱们就从 /admin/index.php 开始吧,其实这个文件也没啥可说的,就是多了一句代码-----------
PHP复制代码 /*
* --------------------------------------------------------------------
* 加载DiliCMS 环境常量
* --------------------------------------------------------------------
*/
require_once BASEPATH . '../' . 'shared/config/constant.php'; 复制代码
//------------第二步: /shared/config/constant.php,一些自定义的常量-----------
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/----------
PHP复制代码 /** * 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,在控制器基类初始化时就完成了每个页面几乎都要有的相同处理,使得模块控制器只专注于功能的具体实现---------
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 -----------
PHP复制代码 /*| -------------------------------------------------------------------------
| pre_controller 钩子
| -------------------------------------------------------------------------
| 此钩子使用于处理POST请求的函数只能通过POST请求访问
*/
$hook['pre_controller'] = array( #在配置项中定义一个钩子,在控制器基类初始化之前就执行
'class' => 'MethodHook',
'function' => 'redirect',
'filename' => 'MethodHook.php',
'filepath' => 'hooks'
); 复制代码PHP复制代码 class MethodHook
{
/**
* 将POST请求的方法method变成_method_post。
*/
public function redirect() #为了安全,将非get请求的操作通通挂载到私有操作上,以禁止url访问
} 复制代码
//----------------------------------上面是核心代码的初始化,剩下的就是具体功能上的代码了,有时间继续更新--------------------------------------------- |