当前位置:文档之家› 织梦dedeCMS二次开发文档手册

织梦dedeCMS二次开发文档手册

织梦dedeCMS二次开发文档手册
织梦dedeCMS二次开发文档手册

DedeCMS二次开发必备基础:

?非常熟悉HTML

?熟悉DIV+CSS的布局

?扎实的PHP基础,熟悉结构化编程,了解OOP,并能看懂和使用

?熟悉MYSQL,掌握SQL语言

DedeCMS二次开发学习过程

?理解CMS是什么

?熟悉DedeCMS的功能(如:栏目的分类,文档管理,模型的使用,系统的设置等常用的功能)

?掌握DedeCMS的模板标签使用及原理

?DedeCMS目录结构分析

熟悉每个文件夹里面主要装什么文件,这样在二次开发的时候知道在哪

个文件夹下的什么文件修改

目录结构摘要:

./a 生成文件存放路径

./data 缓存文件及数据中心

/admin 管理后台数据

/backupdata 备份数据

/cache 缓存文件

/enums 级别联动数据,JS,枚举类型的缓存文件

/js 常用的JS

/mark 水印相关文件

/module 模块安装文件

/rss Rss相关

/sessions Session 存放路径

/textdata 文本数据

/tplcache 模板缓存

/uploadtmp 上传文件缓存位置

/ziptmp zip包解压缓存位置

……

?DedeCMS文件结构分析

熟悉每个文件的基本功能,方便做修改,知道每个文件的大概作用之后,

可以方便的对文件进行修改

文件结构摘要:

common.inc.php 数据库配置文件

config.cache.bak.php 后台系统配置备份

config.cache.inc.php 后台系统配置文件缓存

downmix.data.php 采集混淆缓存文件

mysql_error_track.inc MYSQL错误??志

safequestions.php 安全问题

sitemap.html 站点地图

sys_pay.cache.php 支付网关配置

template.rand.php 随机模板设置

……

?DedeCMS数据库结构分析,至少要熟悉每个表的作用

熟悉每个表的作用,了解几个核心表的设计及字段的含义,方便拿到新

的需求之后,能快速的判断是否加字段,还是新建表来处理。同时也能

理解DedeCMS的数据库设计思想,把有用的设计思路加到自己的系统中。

?DedeCMS的流程控制,及一些核心文件的解析

熟悉一些登陆,注册,文档管理,权限控制,分类管理,模型设置等一

些常用流程控制。对几个核心文件进行解剖,了解其编程技巧及安全机

?DedeCMS插件的开发(****式插件和内嵌式插件)

熟悉两种插件的编写,插件的导入导出,插件搭配模型的使用?掌握里面的编程技巧及系统设计技巧

织梦dedeCMS二次开发文档手册,文件详解以及数据库结构字段说明

1、程序核心程序目录及简介

/include目录程序核心目录

config_base.php 环境定义文件。用于检测系统环境,定义工作目录,保存数据库链接信息,引入常用函数等,建议不要修改。

config_hand.php 系统配置文件。定义系统常用的配置信息定义,可从后台管理直接生成该文件。

config_passport.php 通行证文件

config_rglobals.php 检测系统外部变量

config_rglobals_magic.php 同上

inc_archives_view.php 用于浏览文档或对文档生成HTML

inc_arclist_view.php 用于浏览频道列表或对内容列表生成HTML

inc_arcmember_view.php 用于浏览会员发布的文档

inc_arcpart_view.php 用于解析和创建全局性质的模板,如频道封面,主页,单个页面等inc_arcsearch_view.php 用于文档搜索

inc_arcspec_view.php 用于浏览所有专题列表或对专题列表生成HTML

inc_channel_unit.php 用户解析特定频道的附加数据结构信息

inc_channel_unit_functions.php 系统共用函数集合

inc_downclass.php 防采集随机字符串函数

inc_freelist_view.php 用于对特定内容列表生成HTML

inc_functions.php 可供用户使用的函数集合

inc_imgbt.php GetTypeidSelMember

inc_memberlogin.php 用于用户登录及获得会员状态

inc_photograph.php 用于处理系统中的图片,例如水印,缩略图等

inc_photowatermark_config.php 图片处理参数定义

inc_rss_view.php 用于浏览频道RSS或对RSS生成静态文件

inc_separate_functions.php SpGetArcList函数,用于获得文档列表

inc_sitemap.php 用于生成网站地图

inc_type_tree.php 用于选择栏目的目录树

inc_type_tree_member.php 同上,会员使用

inc_typelink.php 用于显示文章的位置和栏目位置等

inc_typeunit_admin.php 用于频道管理时的一些复杂操作,主要用于后台inc_typeunit_menu.php 同上

inc_userlogin.php 用于管理员登录

inc_vote.php 用于管理投票

jump.php 用于超链接跳转

pub_charset.php 共用字符处理函数,GB/UTF-8/Unicode/BIG5等互换pub_collection.php 用于采集

pub_collection_functions.php 采集用函数

pub_datalist.php 后台管理用数据列表

pub_datalist_dm.php 同上,不使用模板

pub_db_mysql.php 用于操作数据库

pub_dedehtml2.php 用于采集中的HTML解析

pub_dedehtml.php HTML解析器

pub_dedetag.php 用于dede模板标签解析

pub_httpdown.php 用于下载http中的资源

pub_oxwindow.php 后台程序扩展

pub_splitword_www.php织梦分词算法

validateimg.php 验证码

vdimgck.php 验证码

/inc 共用函数目录

inc_fun_funAdmin.php 获取拼音码等函数

inc_fun_funString.php html代码处理等函数

inc_fun_SpGetArcList.php 获取文档列表SpGetArcList

对于菜鸟来说,对于菜鸟来说,config_base.php,这个文件,当你的程序出现问题,需要覆盖,当你的程序出现问题,需要覆盖。不要覆盖config_base.php和config_hand.php文件,里面都是dede一些核心配置文件,对于高手来说,也许修改几个php页面已经达不到目的了,就需要了解dede的数据库结构,下面是部分关键数据表的结构和说明,不完全,还没有整理完全,过几天发布完整版本

主要数据结构表

已经可以指导开发了

dede_addonarticle附加文章表aid int(11) 文章编号

typeid int(11) 分类栏目编号

body mediumtext 文章内容

dede_addonflash 附加Flash表

aid int(11) FLASH编号

typeid int(11) 分类栏目编号filesize varchar(10) 文件大小playtime varchar(10) 播放时长flashtype varchar(10) 作品类型flashrank smallint(6) 作品等级width smallint(6) 影片宽度

height smallint(6) 影片高度flashurl varchar(80) FLASH地址

dede_addonimages 附加图集表

aid int(11) 图集编号

typeid int(11) 分类栏目编号

pagestyle smallint(6) 表现方式(1单页显示2分多页显示3多行多列展示)maxwidth smallint(6) 大图限制宽度

imgurls text 图片集内容(标签存放)

row smallint(6) 多列式参数(行)

col smallint(6) 多列式参数(列)

isrm smallint(6) 是否下载远程图片

ddmaxwidth smallint(6) 小图片宽度限制

dede_addonsoft 附加软件表

aid int(11) 软件编号

typeid int(11) 分类栏目编号

filetype varchar(10) 文件类型

language varchar(10) 界面语言softtype varchar(10) 软件类型accredit varchar(10) 授权方式

os varchar(30) 运行环境

softrank int(11) 软件等级

officialUrl varchar(30) 官方网址officialDemo varchar(50) 程序演示地址softsize varchar(10) 软件大小softlinks text 软件下载链接列表introduce text 软件介绍

dede_addonspec 附加专题表

aid int(11) 专题编号

typeid int(11) 分类栏目编号

note text 专题内容(仅存放标签代码)dede_admin 管理员信息表

ID int(10) 自动编号

usertype int(10) 用户类型

userid varchar(30) 用户登录ID

pwd varchar(50) 用户密码

uname varchar(20) 用户笔名

tname varchar(30) 真实姓名

email varchar(30) 电子邮箱

typeid int(11) 负责频道(0表示全部)logintime datetime 登录时间

loginip varchar(20) 登录IP

dede_admintype 系统用户组管理表rank smallint(6) 组级别编号typename varchar(30) 组名称system smallint(6) 是否为系统默认组

purviews text 权限列表

dede_arcatt 文档自定义属性表

att smallint(6) 编号

attname varchar(30) 属性名称

dede_archives 文章表

ID int(11) 自动编号

typeid int(11) 所属主栏目编号

typeid2 int(11) 所属副栏目编号sortrank int(11) 文章排序(置顶方法)iscommend smallint(6) 是否推荐ismake smallint(6) 是否生成静态channel int(11) 文章所属模型

arcrank smallint(6) 阅读权限

click int(11) 点击次数

money smallint(6) 消费点数

title varchar(80) 标题

shorttitle varchar(36) 简略标题color varchar(10) 标题颜色writer varchar(30) 作者

source varchar(50) 来源

litpic varchar(100) 缩略图pubdate int(11) 录入时间senddate int(11) 发布时间

arcatt smallint(6) 自定属性(att)adminID int(11) 发布管理员ID memberID int(11) 发布会员ID description varchar(250) 摘要keywords varchar(60) 关键词templet varchar(60) 文档模板

lastpost int(11) 最近评论时间postnum int(11) 评论数目

redirecturl varchar(150) 跳转网址mtype int(11) 用户自定义分类

userip varchar(20) 用户IP

locklikeid smallint(6) 是否锁定相关文章likeid varchar(240) 相关文章ID

dede_arcrank 阅读权限表

ID int(10) 自动编号

rank smallint(10) 权限等级membername varchar(20) 等级名称adminrank smallint(10) 管理等级money int(11) 消费点数

dede_arctype 栏目管理表

ID int(10) 栏目编号(自动编号)

reID int(10) 父栏目编号

topID int(10)

sortrank smallint(6) 排序编号

typename varchar(30) 栏目名称

typedir varchar(100) 栏目目录

isdefault smallint(6) 栏目列表选项(1链接到默认页0链接到列表第一页-1使用动态页)defaultname varchar(20) 默认页的名称

issend smallint(6) 是否支持投稿

channeltype smallint(6) 频道类型

maxpage int(11) 保留

ispart smallint(6) 栏目属性

corank smallint(6) 浏览权限

tempindex varchar(60) 封面模板

templist varchar(60) 列表模板

temparticle varchar(60) 文章模板tempone varchar(60) 单独页面模板namerule varchar(50) 文章命名规则namerule2 varchar(50) 列表命名规则modname varchar(30) 模板名称description varchar(200) 栏目介绍keywords varchar(100) 关键词

moresite smallint(6) 多站点支持

siterefer smallint(6) 多站点站点根目录属性sitepath varchar(60) 多站点站点根目录siteurl varchar(60) 多站点绑定域名ishidden smallint(6) 是否隐藏栏目

dede_area 地区表

eid int(11) 地区编号

name varchar(20) 地区名称

rid int(11) 编号属性

10、DEDE读取其它程序数据库,中文有乱码怎么办?

最近有一个单子,要用到另外一个开源PHP的功能,我把它的数据库导入到和DEDE数据库放在一起,前台功能则完全使用该开源PHP的功能,仅仅对样式做少量修改。

然后把这个开源PHP的后台管理删掉,打算自己在DEDE后台做一个管理功能,去管理这个PHP程序的数据库。

结果用DEDE后台的规范写法,得到界面上来自数据库的中文竟然全是乱码。

在仔细一查数据库,原来DEDE的GBK版的数据表的字符集是GBK的,而这个开源项目的数据表字符集是latin1 。

试了一下把数据表改为字符集GBK,结果开源PHP的前台变成了乱码………………

郁闷,应该有办法的,我不要重新写代码!!

找了一些资料,在DEDE后台代码加入了一行,就还原了中文:mysql_query("SET NAMES 'latin1'");

注意这一行代码,最好放在require_once(dirname(__FILE__).'/config.php');之后

如果导入的数据库是UTF8的,也可以使用mysql_query("SET NAMES 'utf8'");

11、mysql的utf8中文排序的解决方法:

最近,处理一个UTF版DEDE的项目时候,自己写了一段代码,需要对文章标题进行排序,但是死活发现排列出来的顺序是乱的!

上网查到原因如下:在mysql中使用默认字符集为utf8,结果想要把中文按拼音排序出现了问题,排出来的顺序乱七八糟,不是想要的结果!

解决办法如下:不想改变表定义及默认编码的情况,将字段先转换成gbk编码再排序:

SELECT * FROM dede_archives ORDER BY CONVERT( title USING gbk ) asc;

前提是在安装mysql时安装了gbk字符集,不然会报错“#1115 - Unknown character set: 'gbk'”

在编译源码时加上gbk编码即可,如果已经安装好了,重新编译再安装,重新编译安装一般不会影响mysql的已有设置,包括数据都不会受到影响。

12、模板的PHP标签,不要带有funtion定义!

最近,一个客户反映一个莫名其妙的问题:一种自定义模型的内容页单独生成静态HTML是OK的,但

是如果是批量生成的时候后台就空白一片,不能生成。无论是在管理列表里选多个文章生成,还是在生成内容页哪里选此类文章所在栏目进行生成,都不行!

我当时也有点晕,先是反复怀疑模型定义有什么问题,然后又怀疑是DEDE的dedetag解析代码有问题,通过很复杂的调试方法跟踪代码运行(说实话,这是我第一次触及DEDE最底层的dedetag解析代码,还挺有意思的,大体思路看懂了,但是细节还没完全搞明白,以后再深入研究研究),但是搞了大半天就是没有个所以然~~~

后来,晕乎乎去看CBA了,看着看着球,突然灵光一闪,为什么会忽略掉模板的因素呢?虽然想不通为什么生成一页可以,连续生成多页就不行,但是也只能先看看模板有什么特殊再说了!

一看不得了,原来模板里别人写了大段大段的php代码,一行行看,突然看到“function xxxx()”字样的函数定义,结合之前的dedetag解析脑袋一转就想通了:

dedetag解析,对于模板里的PHP代码,是编译成了真正PHP代码,如果模板里有一个function定义,那么在连续生产该模板对应页面的过程中,因为是同一个文件调用的dedetag解析模板,等于这个function 被反复定义了,这就不符合PHP的语法规则,正常来说重复定义函数是有报错的,但是由于这些代码是被解析执行的(也可能是主机环境配置的问题),这个错误没有被报告,仅仅是空白一片!

其实上面一堆,一般模板制作者也无需看,只要记住一点:模板的PHP标签,不要带有funtion定义(与此同理,类似class定义等,都不要做)

13、dede根据文章ID获取文章静态地址的函数

网上搜索到的,原作者已经不清楚是谁了,如果看到请来这里跟帖说明,或者站内信给我~~~

凡是用到公用表的任何模型都可以使用~

增加到inculde\extend.func.php 文件最后的?>之前(如果没有这个文件,请新建一个,并在以下代码前

后分别加上

复制代码

1.function GetOneDocUrl($aid)

2.{

3. global $dsql;

4. include_once(DEDEINC."/channelunit.func.php");

5. $aid = trim(ereg_replace('[^0-9]','',$aid));

6.

7. $chRow = $dsql->GetOne("Select arc.*,ch.maintable,ch.addtable,ch.issystem From `2d30_arctiny` arc left join `2

d30_channeltype` ch on ch.id=arc.channel where arc.id='$aid' ");

8.

9. if(!is_array($chRow)) {

10. return $reArr;

11. }

12. else {

13. if(empty($chRow['maintable'])) $chRow['maintable'] = '2d30_archives';

14. }

15.

16. if($chRow['issystem']!=-1)

17. {

18. $nquery = " Select arc.*,tp.typedir,tp.topid,https://www.doczj.com/doc/c916865109.html,rule,tp.moresite,tp.siteurl,tp.sitepath

19. From `{$chRow['maintable']}` arc left join `2d30_arctype` tp on tp.id=arc.typeid

20. where arc.id='$aid' ";

21. }

22. else

23. {

24. $nquery = " Select arc.*,1 as ismake,0 as money,'' as filename,tp.typedir,tp.topid,https://www.doczj.com/doc/c916865109.html,rule,tp.moresite,tp.site

url,tp.sitepath

25. From `{$chRow['addtable']}` arc left join `2d30_arctype` tp on tp.id=arc.typeid

26. where arc.aid='$aid' ";

27. }

28.

29. $arcRow = $dsql->GetOne($nquery);

30.

31. $Url = GetFileUrl($aid,$arcRow['typeid'],$arcRow['senddate'],$reArr['title'],$arcRow['ismake'],$arcRow['arcrank'],$ar

cRow['namerule'],$arcRow['typedir'],$arcRow['money'],$arcRow['filename'],$arcRow['moresite'],$arcRow['siteurl'],$arcRow['site path']);

32. return $Url;

33.}

在自己写的PHP标签或SQL标签里调用方式为[dede:field.id function='GetOneDocUrl(@me)'/]

[BOM]PHP程序的UTF8神秘编码问题之解

提示:采用UTF-8编码的用户请勿使用记事本对代码文件及模板文件进行编辑,使用可以去掉Unicode 签名(BOM)的工具进行编辑。如果您的网站打开一片空白、样式丢失、程序报错很可能是您使用了未能去掉BOM的工具对模板文件或源码文件进行了修改。

现在几乎所有的文本编辑软件都可以显示并编辑UTF-8编码的文件。但是很遗憾,其中很多软件的表现并不理想。

类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于PHP来说,BOM是个大麻烦。

PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个字符呢!

最大的麻烦还不是这个。受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE 无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。

因此,在编辑、更改任何文本文件时,请务必使用不会乱加BOM的编辑器。Linux下的编辑器应该都没有这个问题。WINDOWS下,请勿使用记事本等编辑器。推荐的编辑器是:Editplus 2.12版本以上;EmEditor;UltraEdit(需要取消‘添加BOM’的相关选项);Dreamweaver(需要取消‘添加BOM’的相关选项)等。

对于已经添加了BOM的文件,要取消的话,可以用以上编辑器另存一次。(Editplus需要先另存为gb,再另存为UTF-8。)

在Dreamweaver 里可以修改,去掉Unicode 签名(BOM)

点菜单栏里的修改-> 页面属性,或直接按Ctrl+J 快捷键。

16、自定义模型的文章,新增编辑时不显示自定义字段!?

最近给客户做一个单,在本地调试好了,全站+数据库发给客户,结果客户说后台编辑的时候只能编辑标题、作者、栏目那些内容,但是其它自定义的字段内容,统统看不到……

百思不得其解,于是一步步跟踪代码执行,对照看本地,看是哪一个地方出现问题:

首先,对于自定义模型,DEDE后台是在模板里用来处理其自定义模型的字段的,于是我们查找PrintAutoFieldsAdd函数,可以找到在dede/inc/inc_archives _functi*****.php里定义的;

然后,进一步调试,发现问题出在GetFormItem()函数里,这个函数没有返回应有的表单内容,于是继续查找,发现它在include/customfields.func.php里定义的;

再接下来,进一步调试,发现问题出在GetSysTemplets()函数里,它没有能读取到相应模板文件的内容,于是查到它在include/common.func.php里进行定义;

然后在该函数里,用die()输入模板所在路径,发现一个问题,在本地测试这个路径是对的,而在客户的环境里,输出的路径是错误的,于是找不到这个模板,就不能得到想要内容!

稍微再想了一下,恍然大悟,原来我在本地是有众多网站,所以DEDE安装不在根目录下,而客户则是安装在根目录下!

于是找到后台“系统基本参数”里的“DedeCMS安装目录:”一看,原来客户也意识到这个问题,把这一项改为了“/”来表示根目录,但是就是这个设置导致了上述问题,如果安装在根目录,应该“DedeCMS安装目录:”设置为空即可!

17、使用国外主机导入CSV文件不能读取其中的中文?

最近给客户做一个单,在本地调试好了,发给客户在客户的本地也调试好,但是上传到国外主机之后,发现一个导入CSV的功能不正常,CSV里英文可以导入,但是中文部分却全部导入为空……

上网查找了一些相关资料后,发现原来是PHP的fgetcsv函数对环境依赖很大,在国外主机就很容易读取了中文,解决办法也很简单:在使用该函数的页面的第一行,增加这么一句:setlocale(LC_ALL, 'zh_C N');

18、注意JS定义

4.

百思不得其解,反正来来回回调整了解决两个晚上,后来发现重点就是

复制代码

1.

2.

3.

不能删除!

心里想算了,反正都能显示,虽然还有个JS错误,但是也只能暂时这样吧。最后准备打包文件给客户,

心想最后看一把代码吧,有些多余就删掉,突然眼角看到页面顶头的这个东东:

复制代码

1.

2.