dedecms代码详解.doc

上传人:b****3 文档编号:2616273 上传时间:2022-11-03 格式:DOC 页数:18 大小:110.50KB
下载 相关 举报
dedecms代码详解.doc_第1页
第1页 / 共18页
dedecms代码详解.doc_第2页
第2页 / 共18页
dedecms代码详解.doc_第3页
第3页 / 共18页
dedecms代码详解.doc_第4页
第4页 / 共18页
dedecms代码详解.doc_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

dedecms代码详解.doc

《dedecms代码详解.doc》由会员分享,可在线阅读,更多相关《dedecms代码详解.doc(18页珍藏版)》请在冰豆网上搜索。

dedecms代码详解.doc

dedecms代码研究

(1)开篇

dedecms相信大家一定都知道这个cms系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统。

而模板系统也是其他cms系统比较难模仿的的东西,这个东西还是需要一点开发功力和技巧的。

博学网【】采用的就是dedecms,建站相当迅速,方便!

本系列文章就研究一下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_onceDEDEINC."/arc.partview.class.php";

$GLOBALS['_arclistEnv']='index';

$row=$dsql->GetOne("Select*From`#@__homepageset`");

$row['templet']=MfTemplet($row['templet']);

$pv=newPartView();

$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表,晕,就一条记录,俩字段,基本猜到了,一个是首页模板名称,一个是生成的静态文件的位置。

回来继续分析前面的代码

$row['templet']=MfTemplet($row['templet']);

通过MfTemplet函数好像把$row['templet']进行了某些转换。

我们记下MfTemplet函数,以待后面挖掘。

接下来,就是new了一个PartView类,看这个名字,我们就知道了前面加载arc.partview.class.php的作用啦。

至于这个PartView类有什么作用,我们继续看代码。

看了下面两行,我想大家应该都明白啦

$pv->SetTemplet($cfg_basedir.$cfg_templets_dir."/".$row['templet']);

$pv->SaveToHtml(dirname(__FILE__).'/index.html');

创建个视图对象(PartView类的实例,我们姑且叫视图对象),设置模板,通过SaveToHtml方法,把最后生成的页面写到指定位置。

首页生成完毕,接下来就是把生成的静态文件通过include的形式显示出来,然后exit中断页面解析。

至此,/index.php就分析完啦。

回顾:

它先是通过/data/common.inc.php,判断是否安装了dedecms或者说判断是否定义了数据库配置信息,好为后面操作打下基础。

然后判断是否有GET请求"upcache",如果有就加载/include/common.inc.php初始化系统,然后调用partview类的相关方法来生成静态首页文件,最后显示出来。

这么来看dedecms也没有太多的秘密嘛~

不过呢,我们这篇文章也遗留下了几个问题:

1)加载了/include/common.inc.php,里面做了哪些工作?

2)/include/arc.partview.class.php到底是干什么的,/include/下还有很多arc开头的文件都是干什么的?

3)MfTemplet这个函数到底对模板文件路径这个字符串做了什么操作?

4)partview类的相关方法都有什么秘密?

带着这几个疑问,我们将结束本文,后面的文章将将这些谜题一一揭开。

dedecms代码研究(3)partview的迷惑

上次,我们从dedecms的index.php文件中了解到了很多信息,也提出了一些问题,本文开始就带着前面的问题,继续我们的dedecms之旅吧。

先回顾一下之前我们在index.php文件研究中总结的东西。

首先加载common.inc.php,接下来组织模板,生成静态页面并跳到静态页面。

common.inc.php入口配置文件:

接下来,我们就先来看看common.inc.php里面都有什么吧。

打开/include/common.inc.php里面的注释已经说地比较清楚了。

我们大概说说结构。

先是定义一堆常量。

然后是做一些安全措施,对PHP的系统环境进行一些设置,代码里面的注释已经写地很清楚了。

接下来是把dedecms的系统配置参数文件包含进来:

require_once(DEDEDATA."/config.cache.inc.php");

看文件名字,我们猜测这个配置文件可能是数据库里面的配置信息的缓存。

接下来加载了数据库配置信息文件:

require_once(DEDEDATA.'/common.inc.php');

这个文件,不是根据数据库中信息生成的缓存,而是dedecms安装的时候生成的。

前一篇文章我们说过index.php文件开始,检测dedecms是否安装,就是看这个文件是否存在的。

再接下来,整理了很多目录,比如:

站点根目录、模板目录,插件目录、数据目录等,还整理了很多变量。

最后加载了数据库操作类dedesql.class.php和常用函数文件common.func.php

嗯,common.inc.php的谜底揭开,里面没什么好玩的东西啦,都是最基本的东西。

接下来我们就得看看arc.partview.class.php吧,这里面可是dedecms关键呢

加载了channelunit.class.php,typelink.class.php,ftp.class.php

下面就是partview类的定义:

因为index.php中使用partview类的SetTemplet方法和SaveToHtml方法,所以,我们为了能更简单地深入,就从这两个方法着手。

第一、我们先看看partview的构造函数。

创建了一个DedeTagParse类的实例,看名字是标签解析类哦。

然后设置了几个参数。

接下来,new了一个TypeLink类,设置了一堆参数。

搞的很云里雾里的。

第二、看看SetTemplet吧。

啊,这个还算简单。

先,使用DedeTagParse类的LoadTemplet方法载入模板。

再,设置一些Fields数组的元素

最后,调用ParseTemplet方法。

ParseTemplet方法里面弄了一堆$GLOBALS数组的元素,然后调用了MakeOneTag函数。

费解啊

再看看SaveToHtml方法吧,前面就是建目

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1