dedecms程序流程剖析.doc_第1页
dedecms程序流程剖析.doc_第2页
dedecms程序流程剖析.doc_第3页
dedecms程序流程剖析.doc_第4页
dedecms程序流程剖析.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

流程图:基础知识-模板制作-程序剖析-二次开发基础知识概念:模型:指dedecms针对内容的展示应用的不同方式-例如:软件模型、文章模型、图片集等等,这些模型是可以自己创建定义的主表:系统主表指的是#_archives附加表:一般附加表都是以#_addon识别ID命名的底层模板:dedecms有默认的底层模板就是在template/system这个文件夹里面,底层模板的意思可以理解为内容的展示样式(style)。当我们没指定底层模板的时候就是用默认的标签样式dede:标签名称 属性=值 底层模板(显示在页面的效果) /dede:标签名称dede:标签名称 属性=值/调用字段field:字段名/说明:调用的字段包括主表和附加表除了数据库密码之外所有字段,field标记一般存在于底层模板里面调用变量dede:global.变量名/输出sql语句dede:sql sql=完整的sql语句 底层模板 /dede:sql使用自定义函数dede:标记名称function=youfunction(参数一,参数二,me)/其中 me 用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:dede:field.pubdate function=strftime(%Y-%m-%d %H:%M:%S,me)/说明:me表示当前调用的值调用附加表字段的方法dede:arclist addfields=filetype,language,softtype row=8 channelid=3说明:addfields这个方法可以调用附加表的字段,这个应该在一些特定的模型里面。当我需要在某些页面调用的时候可以使用在标签里使用简单PHP代码field:senddate runphp=yes 说明:通过runphp=yes可以实现简单php代码的嵌套。具体使用案例可以参考我后面整理的常用案例,这里就简单了解下就OK如何调用单表模型arclistsg可以调用单表模型内容说明:arclistsg标签调用时候需要加上channelid,指定模型模板制作1、 首页头部参考dede:global.cfg_webname/导航dede:golobal.cfg_cmsurl/dede:channel type=top field:typename/dede:channel搜索 搜索 智能模糊搜索 仅搜索标题 搜索 热门标签dede:tag row=8 getall=1 sort=month field:tag /dede:tag说明:getall=0 或者 getall=1 0表示全局,1表示当前会员中心TAG标签网站地图RSS订阅2、 list_识别ID.htm头部部分参考dede:field.title/_dede:global.cfg_webname/当前位置 当前位置:dede:field name=position/列表部分dede:list pagesize=10 field:title/dede:list分页部分dede:pagelist listitem=info,index,end,pre,next,pageno listsize=5/3、 article_识别ID.htm头部部分参考dede:field.title/_dede:global.cfg_webname/=0;i-)if(saveidsi=fid & hasid) continue;else if(saveidsi=fid & !hasid) hasid = true;saveid += (saveid= ? saveidsi : ,+saveidsi);j+;if(j=10 & hasid) break;if(j=9 & !hasid) break;if(hasid) alert(您刚才已表决过了喔!); return false;else saveid += ,+fid;SetCookie(badgoodid,saveid,1);elseSetCookie(badgoodid,fid,1);myajax = new DedeAjax(taget_obj,false,false,);myajax.SendGet2(dede:field name=phpurl/feedback.php?aid=+fid+&action=+ftype+&fid=+fid);DedeXHTTP = null;function postDigg(ftype,aid)var taget_obj = document.getElementById(newdigg);var saveid = GetCookie(diggid);if(saveid != null)var saveids = saveid.split(,);var hasid = false;saveid = ;j = 1;for(i=saveids.length-1;i=0;i-)if(saveidsi=aid & hasid) continue;else if(saveidsi=aid & !hasid) hasid = true;saveid += (saveid= ? saveidsi : ,+saveidsi);j+;if(j=20 & hasid) break;if(j=19 & !hasid) break;if(hasid) alert(您已经顶过该帖,请不要重复顶帖 !); return; else saveid += ,+aid;SetCookie(diggid,saveid,1);elseSetCookie(diggid,aid,1);myajax = new DedeAjax(taget_obj,false,false,);var url = dede:global.cfg_phpurl/digg_ajax.php?action=+ftype+&id=+aid;myajax.SendGet2(url);DedeXHTTP = null;function getDigg(aid)var taget_obj = document.getElementById(newdigg);myajax = new DedeAjax(taget_obj,false,false,);myajax.SendGet2(dede:global.cfg_phpurl/digg_ajax.php?id=+aid);DedeXHTTP = null;-说明:js部分为评论模块和顶踩部分内容部分的调用dede:field.字段名/说明:这样的格式是内容部分的调用注意与field:字段名/的区别小功能模块收藏推荐打印挑错上一篇dede:prenext get=pre/下一篇dede:prenext get=next/评论模块可以直接参考默认模板进行复制,注意加载相应的js程序剖析Dede系统的文件夹各文件夹介绍:1)系统目录系统目录,一般都是全局函数、类处理文件、标签源码等一些保持系统正常运行的必须存在的文件!这个文件夹为 include/我在上面之所以以/结尾,意思就是这个文件夹下的所有子文件夹及文件均是系统目录。绝大多数情况下是既不能删除,也不能移动。甚至连更名都不允许。除非你能对Dede进行彻底的二次开发,否则请不要对这个目录进行操作。2)数据目录数据库目录,一般用于存在网站是运行的过程中所产生的一些文件,有了这些文件,系统才能更好的运行起来。当然,有的文件,也是必须存在的。这个文件夹为 data/当然,由于这个目录下的文件夹较多,为了能使大家能够更好的区别了解,我在这里也为大家简单的整理了一下这些子文件夹的含义:data 数据目录admin 网站后台管理的一些必要配置backupdata 默认的系统数据库备份目录(后台可设置为其它目录)cache 缓存目录(这个缓存是栏目缓存等)enums 联动菜单js JS文件 / 这个来源于后台生成 获取JS文件mark 水印相关module 模块插件 /这里的文件均可以在后台模块管理处安装或下载payment 看这文字跟支付相关,貌似V5.6无效了(待确定)rss RSS订阅文件,在后台生成safe DedeV5.6 新增的后台 验证安全设置 的配置文件sessions 这个不用说了,sessions验证文件textdata 这个是如果将文章以文本形式存储的话,那么就会储存到这里tplcache 模板生成具体内容时的标签缓存uploadtmp 上传的临时文件夹ziptmp ZIP操作时的临时文件夹common.inc.php 数据库配置文件config.cache.inc.php 系统配置文件config.cache.bak.php 系统配置文件备份config.file.inc.php 远程发布的配置文件downmix.data.php 防猜忌混淆字符串配置safequestions.php 会员注册时的安全问题配置template.rand.php 文档随机模板配置3)模板目录说到这个,估计很多人眼睛都亮了。因为一个网站做得好不好,其实模板(通常也就是网站的前端体现)是非常重要的一个环节,这里废话不多说,我只想说重点。就是这个模板文件夹的目录是:templets/同理,由于模板目录里文件比较多,我也会给大家列出一个大概的样式,用于大家参考:templets/ 前台模板文件的总目录default/ 系统默认的模板风格 images/ 默认模板中所用到的图片 js/ 默认模板中所用到的JS文件 css/ 默认模板中所用到的CSS文件 advancedsearch.htm 模型自定义搜索页面 ajaxfeedback.htm 文档内容页ajax评论模板 article_article1.htm 文章模型默认随机内容模板2 article_article2.htm 文章模型默认随机内容模板1 article_article.htm 文章模型默认内容模板 article_article_frame.htm 启用多站点后的文章模型内容模板 article_default.htm 模型内容模板不存在时的错误提示模板 article_default_sg.htm 独立表单模型内容模板不存在时的错误提示模板 article_image.htm 图集内容模板 article_image_frame.htm 多站点后的图集内容模板 article_infos.htm 分类信息内容模板 article_shop.htm 商城内容模板 article_soft.htm 软件内容模板 article_soft_frame.htm 多站点软件内容模板 article_spec.htm 专题内容模板 footer.htm 全站底部 googlemap.htm google地图(需要配合自由列表) head.htm 全站头部 index.htm网站首页 index_article.htm 文章频道封面 index_default.htm 模型频道封面模板不存在时的默认模板 index_default_sg.htm 独立表单模型频道封面模板不存在时的默认模板 index_image.htm 图集频道封面 index_infos.htm 分类信息频道封面 index_shop.htm 商城频道封面 index_soft.htm 软件频道封面 list_default.htm 模型列表模板不存在时的默认模板 list_default_sg.htm 独立表单模型列表模板不存在时的默认模板 list_free.htm 自由列表默认模板 list_image.htm 图集列表 list_infos.htm 分类信息列表 list_shop.htm 商城列表 list_soft.htm 软件列表 list_spec.htm 专题列表 search.htm 搜索结果页 singlepage.htm 单页面模板 tag.htm TAG首页 taglist.htm TAG列表plus/ 模块插件的模板目录system/ 其它的一些系统底层模板wap/ 手机wap模板4)后台目录我们常说的后台目录,一般都是指的管理员在后台地址登陆所在的目录。在DedeCMS 中,默认的后台目录为:dede/注意:推荐大家在系统完成调试后修改这个目录名,防止非法用户登录。5)会员目录会员目录一般用于网站提供给一些访客用于注册、登陆用的。当然,里面也包括了会员空间,会员管理中心的模板风格等文件。该目录的地址为:member/6)模块插件目录这个目录一般用于模块插件的文件存在,比如购物车、高级搜索、动态浏览时的文件、记录下载次数、阅读次数等。这个文件夹为:plus/7)其它目录其它目录包括Html静态目录,专题目录等等。这些文件可根据自身需要来处理。a/ 默认的静态页面生成页面install/ 系统安装界面uploads/ 图片、附件等保存目录special/ 专题目录images/ 程序本身用到的图片/include目录 程序核心目录config_base.php 环境定义文件。用于检测系统环境,定义工作目录,保存数据库链接信息,引入常用函数等,建议不要修改。config_hand.php 系统配置文件。定义系统常用的配置信息定义,可从后台管理直接生成该文件。config_passport.php 通行证文件config_rglobals.php 检测系统外部变量config_rglobals_magic.php 同上inc_archives_view.php 用于浏览文档或对文档生成HTMLinc_arclist_view.php 用于浏览频道列表或对内容列表生成HTMLinc_arcmember_view.php 用于浏览会员发布的文档inc_arcpart_view.php 用于解析和创建全局性质的模板,如频道封面,主页,单个页面等inc_arcsearch_view.php 用于文档搜索inc_arcspec_view.php 用于浏览所有专题列表或对专题列表生成HTMLinc_channel_unit.php 用户解析特定频道的附加数据结构信息inc_channel_unit_functions.php 系统共用函数集合inc_downclass.php 防采集随机字符串函数inc_freelist_view.php 用于对特定内容列表生成HTMLinc_functions.php 可供用户使用的函数集合inc_imgbt.php GetTypeidSelMemberinc_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二次开发2、 代码篇2.1、common.func.php 公用函数获得当前的脚本网址function GetCurUrl()返回格林威治标准时间function MyDate($format=Y-m-d H:i:s,$timest=0)把全角数字转为半角function GetAlabNum($fnum)把含HTML的内容转为纯textfunction Html2Text($str,$r=0)把文本转HTMLfunction Text2Html($txt)输出Ajax头function AjaxHead()中文截取2,单字节截取模式function cn_substr($str,$slen,$startdd=0)把标准时间转为Unix时间戳function GetMkTime($dtime)获得一个 0000-00-00 00:00:00 标准格式的时间function GetDateTimeMk($mktime)获得一个 0000-00-00 标准格式的日期function GetDateMk($mktime)获得用户IPfunction GetIP()获取拼音以gbk编码为准function GetPinyin($str,$ishead=0,$isclose=1)dedecms通用消息提示框function ShowMsg($msg,$gourl,$onlymsg=0,$limittime=0)保存一个cookiefunction PutCookie($key,$value,$kptime=0,$pa=/)删除一个cookiefunction DropCookie($key)获取cookiefunction GetCookie($key)获取验证码function GetCkVdValue()过滤前台用户输入的文本内容/ $rptype = 0 表示仅替换 html标记/ $rptype = 1 表示替换 html标记同时去除连续空白字符/ $rptype = 2 表示替换 html标记同时去除所有空白字符/ $rptype = -1 表示仅替换 html危险的标记function HtmlReplace($str,$rptype=0)获得某文档的所有tagfunction GetTags($aid)过滤用于搜索的字符串function FilterSearch($keyword)处理禁用HTML但允许换行的内容function TrimMsg($msg)获取单篇文档信息function GetOneArchive($aid)2.2、dedesql.class.php 数据库类系统会自动载入 dedesql.class.php 文件,并用$dsql = $db = new DedeSql(false);进行初始化数据库连接,因此在工程所有文件中均不需要单独初始化这个类,可直接用 $dsql 或 $db 进行操作,为了防止错误,操作完后不必关闭数据库。常用的方法:1、执行一个非查询类型的SQL语句,如 insert 、create 、update 等$rs = $db-ExecuteNoneQuery($sql);返回值为是否执行成功。2、执行一个非查询类型的SQL语句,并返回成功记录数$rs = $db-ExecuteNoneQuery2($sql);与上面相比,它返回的是影响的记录数,而不是布尔值3、返回单个记录$arr = $db-GetOne($sql);$dsql 如果不带 limit ,系统会自动加上 limit 0,14、执行条件查询语句1 $db-SetQuery($dsql); 2 $db-Execute(); 3 while($arr = $db-GetArray() 4 5 可以简化为:6 $db-Execute(me,$dsql); 7 while($arr = $db-GetArray() 8 9 me 为记录集游标,用于区分不同的查询,如:10 $db-Execute(me,$dsql); 11 while($arr = $db-GetArray() 12 13 $db-Execute(2,$dsql2); 14 while($arr2 = $db-GetArray() 15 16 17 18 像这种情况必须指定一个值区分默认的me参数,否则会出错$db-GetArray($rsid,$acctype) 参数$rsid=me$acctype=MYSQL_ASSOC在查询游标中读取数据还可以用$db-GetObject($rsid=me);返回的结果是用类结构表示的值。5、获取上一个插入的自动递增主键id值$db-GetLastID();6、获得查询的总记录数$db-GetTotalRow($rsid=me)7、获得MySql的版本号$db-GetVersion($isformat=true)默认的情况下会转换成 x.xx 形式浮点数8、析放某查询的资源$db-FreeResult($rsid=me);9、在数据库中是否存在某数据表$db-IsTable($tbname)10、重新选择要操作的数据库$db-SelectDB($dbname);11、获得数据库连接标识$db-linkID获得这个连接标识后,可以直接用mysql相关函数进行数据库操作在非不得已的情况,项目中一般不使用这个变量。2.3、datalistcp.class.php 动态分页类类文件include/datalistcp.class.php适用范围:数据量不大的数据分页使用方法:1 $dl = new DataListCP(); 2 $dl-pageSize = 25; /设定每页显示记录数(默认25条) 3 $dl-SetParameter($key,$value); /设定get字符串的变量 /这两句的顺序不能更换4 $dl-SetTemplate($tplfile);?/载入模板 5 $dl-SetSource($sql);?/设定查询SQL 6 7 $dl-Display();?/显示 模板8 dede:datalist 9 field.fieldname1/ - field.fieldname2/ . 10 /dede:datalist 11 12 tag:pagelist listitem=info,index,end,pre,next,pageno listsize=5/ listitem、listsize 是可选属性如果需要自定义 datalist 相关属性,可以继续本类来创建一个新类,只需改变 GetArcList($atts,$refObj=,$fields=array() 方法即可。2.4、dedetag.class.php 静态模板类类文件include/dedetag.class.php这个文件是dedecms V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行)一、模板语法织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。1、织梦模板引擎的代码样式有如下几种形式:dede:标记名称 属性=值/dede:标记名称 属性=值/dede:标记名称dede:标记名称 属性=值自定义样式模板(InnerText)/dede:标记名称提示:如果使用带底层模板的标记,必须严格用dede:标记名称 属性=值/dede:标记名称 这种格式,否则会报错。2、织梦模板引擎内置有多个系统标记,这些系统标记在任何场合都是能直接使用的。(1) global 标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:dede:global name=变量名称/dede:global或dede:global name=变量名称/其中变量名称不能加 $ 符号,如变量 $cfg_cmspath ,应该写成 dede:global name=cfg_cmspath/ 。(2) foreach 用来输出一个数组,形式为:dede:foreach array=数组名称field:key/ field:value/dede:foreach(3) include 引入一个文件,形式为:dede:include file=文件名称 ismake=是否为dede板块模板(yes/no)/对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录3、织梦标记允许在任何标记中使用函数对得到的值进行处理,形式为:dede:标记名称 属性=值 function=youfunction(参数一,参数二,me)/其中 me 用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:dede:field name=pubdate function=strftime(%Y-%m-%d %H:%M:%S,me)/4、织梦标记允许有限的编程扩展。格式为:dede:tagname runphp=yes$aaa = me;me = 123456;/dede:tagnameme 表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给me。此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText。二、解析方式在 dedetag.class.php 里面有四个类class DedeAttribute 属性结构表述class DedeAttributeParse 属性解析器class DedeTag 标签结构表述class DedeTagParse 标签解析器使用解析类解析模板时一般经过下面的步骤1、初始化:$dtp = new DedeTagParse();2、载入模板/模板字符串:$dtp-LoadTemplate(模板文件(绝对路径)); /会生成缓存,第二次不需解析模板或$dtp-LoadSource(字符串);3、给标签赋值foreach($dtp-CTags as $tid=$ctag) /判断ctag的名称和属性,并给赋不同的值,通常用函数处理 if($ctag-GetName=mytag) $dtp-Assign($tid, mytagvalue($ctag) ); 在上面例子中,直接把名称为 mytag的标签转交给 mytagvalue 函数处理,mytagvalue 里判断$ctag的各个属性,返回不同内容即可。在 V5.3版本中,通常除了field、list等专用标签之外,凡arc.*开头的类解析的文件,标签都是对应该 include/taglib 的源码的,这个由系统进行了自动的映射。4、显示或保存为HTML$dtp-display();或$dtp-SaveTo(静态文件名);对于二次开发人员而言,不大需要知道dedecms模板具体解析方式,不过应该十分清楚CTag这个类的结构,从而判断标签不同属性进行处理。1 class DedeTag 2 3 var $IsReplace=FALSE; /标记是否已被替代,供解析器使用 4 var $TagName=; /标记名称 5 var $InnerText=; /标记之间的文本 6 var $StartPos=0; /标记起始位置 7 var $EndPos=0; /标记结束位置 8 var $CAttribute=; /标记属性描述,即是class DedeAttribute 9 var $TagValue=; /标记的值 10 var $TagID = 0; 11 12 /获取标记的名称和值 13 function GetName() 14 15 return strtolower($this-TagName); 16 17 18 function GetValue() 19 20 return $this-TagValue; 21 22 23 /下面两个成员函数仅是为了兼容旧版 24 function GetTagName() 25 26 return strtolower($this-TagName); 27 28 29 function GetTagValue() 30 31 return $this-TagValue; 32 33 34 /获取标记的指定属性 35 function IsAttribute($str) 36 37 return $this-CAttribute-IsAttribute($str); 38 39 40 function GetAttribute($str) 41 42 return $this-CAttribute-GetAtt($str); 43 44 45 function GetAtt($str) 46 47 return $this-CAttribute-GetAtt($str); 48 49 50 function GetInnerText() 51 52 return $this-InnerText; 53 54 2.5、dedetemplate.class.php 动态模板类核心类文件include/dedetemplate.class.php用途:用于非核心模块的动态页面或列表页的模板解析,如:member/content_list.php ,通常是在 datalistcp.class.php 中使用,这个类在动态运行的情况下,由于本身是把模板编译成PHP的,因此性能上会优级于旧的解析类,这个方法将在未来版本中作为通用的方式。一、使用方法:$tpl = new DedeTemplate(模板对象实例名称,通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论