dedecms代码详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dedecms代码研究(1)开篇
dedecms相信大家一定都知道这个cms系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统。而模板系统也是其他cms系统比较难模仿的的东西,这个东西还是需要一点开发功力和技巧的。
本系列文章就研究一下dedecms的这套系统,挖掘一下看看里面有什么好东西。
官方网站:本文使用的是5.6版的dedecms
建议大家先了解一下dedecms的功能。自己先动手用一下,对系统功能有个大概了解。
本文先带领大家了解一下dedecms的代码和功能架构。
其实,dedecms在架构上没什么应用架构模式可言,就是最简单的PHP应用而已。访问不同的PHP文件,管理不同的系统功能。看目录大家都能猜出来各个目录干什么用的。include目录放系统的一些公用函数和类,plus目录放插件,templates目录放模板,dede目录是管理后台目录。
我们打开include目录,看看里面都有什么好东西。
calendar 一个选时间的js
captcha 一个验证码,还是开源组件
code 没啥意思,翻页的文字
data 里面是一些系统用到的资源,比如声音,分词库,字体,图片等
dialog 里面估计是一些AJAX弹出窗口的内容部分。以后碰到了再说
inc 里面一些单独的功能类函数,以后研究一下为什么要单独放
payment 支付接口
taglib 好东西,是dedecms的标签存放的地方,打开看看,里面一堆文件,貌似就是dedecms的模板标签啦
tpllib 模板库?暂时搞不明白,希望随着研究深入,能弄明白
其他include目录下的文件估计都是一些最基本的功能文件啦,比如常用函数,模板系统之类的东西了。用到再说吧
打开dede目录(就是dedecms的管理目录)看看,哟嗬,里面的东西还挺多,看名字就知道了,都是各种功能管理文件,一个功能一个文件。最原始的网站开发模式做出来的。我们姑且称之为高效吧。毕竟PHPwind和discuz之类也是用类似的方法开发的。
整个程序大体就这些东西啦。功能就不讲了,建议不熟悉dedecms的朋友自己看一下dedecms的后台管理功能,这样能有助于我们更好理解和分析它。
另外提一点,我们的这次代码分析,主要分析的是其页面生成、显示、模板处理、标签处理部分,这套系统也是dedecms比较引以为傲的东西,之后呢,还会分析一些笔者觉得比较酷的功能代码。
最后,希望这次代码分析旅程能让大家有所收获。
dedecms代码研究(2)从index开始
分析开始:
现在继续,今天讲的主要是dedecms的入口代码。
先打开index.php看看里面是什么吧。打开根目录下的index.php,映入眼帘的是一个if 语句。
检查/data/common.inc.php是否存在。如果不存在就跳转到安装界面。
我们来到/data/看看这个目录和common.inc.php。
打开/data/,里面很多目录和文件,有上传的临时目录,模板缓存,压缩的临时目录,各种数据库里保存的系统配置信息的缓存文件以及其他的一些东西,就一个字乱~好吧,我们打开common.inc.php。原来就是保存了数据库连接的相关变量而已。说白了,就是dedecms的数据库连接配置文件,这是安装完系统生成的。所以/index.php会检查它是否存在。
我们回到/index.php中继续往下看,第二个if语句,判断GET请求“upcache”是否存在,存在就更新首页缓存,不存在就直接301跳转到index.html,也就是dedecms的静态首页(记住,dedecms的前台页面都是系统生成的静态页面)。
想想接下来我们要研究什么?对,就是GET请求“upcache”存在的时候,更新首页缓存这小段代码啦。代码如下:
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/arc.partview.class.php";
$GLOBALS['_arclistEnv'] = 'index';
$row = $dsql->GetOne("Select * From `#@__homepageset`");
$row['templet'] = MfTemplet($row['templet']);
$pv = new PartV iew();
$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
$pv->SaveToHtml(dirname(__FILE__).'/index.html');
include(dirname(__FILE__).'/index.html');
exit();
第一行,加载/include/common.inc.php,估计是一些常用函数和加载其他系统函数和类的文件。
第二行,又加载了DEDEINC."/arc.partview.class.php",注意DEDEINC这个常量,我们知道经过前期对dedecms目录结构观察,arc.partview.class.php是在/include目录下的,而加载/include/common.inc.php却没有用DEDEINC这个常量,这说明,common.inc.php里面定义了DEDEINC这个常量,所以后面得以使用,也印证了common.inc.php大体作用就是系统运行基本部分,都在这里面啦。我们不急着进common.inc.php,继续把index.php的更新缓存代码看完。
第三行,设置了一个全局变量:$GLOBALS['_arclistEnv'] = 'index';
第四行,获取一个表'#@__homepageset'的所有记录,当然如果你看下数据库,里面没有“#@__homepageset”这个表,我们判断,是数据库操作相关函数把表名用表名前缀替换了一下前半部分,这个都不重要了,重要的是,通过这句,获取了首页的相关配置信息,我们打开数据库里面的dede_homepageset表,晕,就一条记录,俩字段,基本猜到了,一个是首页模板名称,一个是生成的静态文件的位置。