dedecms讲解
来源:互联网 发布:aso优化 app排名 编辑:程序博客网 时间:2024/06/05 23:52
最近,辞职了,可能当个讲师,给老师的培训机构分享一些东西,此篇是dedecms,好久以前搞的,今天花时间又看了看:
dedecms首页文件,以及所有相关文件引入的分析,核心是:dedecms的模板解析,解析简单写了下:
dedecms开发手册:
http://help.dedecms.com - 里面各种教程很丰富http://help.dedecms.com/v53/ - 可能官方手册
dedecms数据字典:
http://help.dedecms.com/develop/2011/0714/166.htmldedecms目录结构
有点多,另外一个文章:dedecms目录结构
------------------
开始文件分析:
index.php入口文件1)data/common.inc.php - 数据库配置文件,安装后,会生成,未生成表示安装失败
2)include/common.inc.php - 核心初始化文件
1.错误级别,debug模式,版本兼容,php.ini配置项设置及检测,get,post,request安全性过滤,已经类似extract解析为独自的变量2.session兼容性处理,5.4之后移除的几个函数重定义。session存储路径的设置
3.定义各种常量
4.引入系统配置变量,后台可配置项,data/config.cache.inc.php
5.检测到$_FILES,文件上传,引入include/uploadsafe.inc.php - 上传文件的安全检测
6.系统安全配置文件存在,则引入:data/safe/inc_safe_config.php(验证码和验证问题配置)
7.得到程序中会使用到的各种变量,各目录路径,网站根路径,网站系统路径,模板路径,memcache配置,smtp配置
8.定义一个__autoload()自动加载类方法,首先尝试在 include/类名.class.php查找,找不到再到 include/model/类名.php(这个models目录不存在,我们可自己创建。定义常量时,dedecms给我们定义了现在的几个mvc经常用的model/view/controller的目录,分别是:include/model|include/templates|include/control)
9.引入数据库处理类,优先尝试 'mysqli',其次 'mysql'(mysql尽量少用,php5.6之后已经移除) //-这里得注意下:该文件中实例化了数据库类,$dsql = $dsqli = $db = new Dedesqli(false),在之后的所有调用中,都会调用,不需要再次实例化
10.引入include/common.func.php全局函数文件
11.引入include/control.class.php 和 include/model.class.php
-------
include/control.class.php 引入了:include/dedetemplate.class.php - 模板解析类(至此,model/view/control3个都有了)
Tag - 标记的数据结构描述
DedeTemplate - 模板解析类
TagAttribute - tag属性集合
TagAttributeParse - 属性解析器
-------
12.如果 data/helper.inc.php 存在,引入该文件,就调用helper()-小助手函数,会引入 'include/helpers/xxx.helper.php' 小助手文件
13.载入UCenter配置
3)include/arc.partview.class.php - 视图类
1.include/channelunit.class.php - 频道模型单元类(查询 'channeltype-频道表' 频道数据,并处理频道的一些展示)-------
include/dedetag.class.php - 织梦模版解析类
Dedetag - 标记的数据结构描述
DedeTagParse - 模板解析类
DedeAttribute - 属性描述操作类
DedeAttributeParse - 属性解析类
include/channelunit.func.php - 频道相关的变量获取,以及引入 'include/helper/channelunit.helper.php' 助手
-------
2.include/typelink.class.php - 栏目链接,简单看了看,所有与栏目相关的处理。'arctype - 栏目表',栏目面包屑导航,栏目的递归等
-------
include/channelunit.func.php
-------
3.include/ftp.cass.php - ftp操作类,不支持 SFTP 和 SSL FTP 协议, 仅支持标准 FTP 协议(不清楚...)
4)该处理的逻辑,引入的文件已经完毕,从 'homepageset-首页设置' 得到首页模板,开始对模板进行处理
$pv = new PartView();$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']); /** * 简述下dedetag加载模板文件的流程: * note: * class DedeTag{} 只会解析模板文件,将所有的标签和属性给赋值给$this->CTags数组中 * 1.如果$temp文件不存在,$this->dtp->SourceString = "$temp not found"; $this->dtp->ParseTemplet(); * 2.如果$temp文件存在,读取文件内容。$this->dtp->SourceString = '该文件的内容'; * 查看$temp的有无模板缓存文件 $this->dtp->LoadCache($temp); 返回true|false * 1)模板缓存文件存在,loadcache后,返回 '' * 解析下loadcache()都做了什么: * 1.查看系统有无开启模板缓存,关闭了返回false * 2.根据传入的模板文件名,查询该文件名对应的'1.缓存文件名;2.缓存文件生成的时间文件',有一个不存在,返回false * 3.对比缓存生成时间和模板最后的修改时间,如果不相等,返回false * 4.引入cachefile,并将其中的解析数组,赋值给$this->dtp->CTags[$this->Count] = $CDTag数组,用于最终的加载模板 * 2)缓存文件不存在,$this->dtp->ParseTemplet(); * sumary: * 1.$this->dtp->SourceString 已经存储了要解析的模板文件的内容字符串 * 2.$this->dtp->ParseTemplet() 就是对 $this->dtp->SourceString 进行解析。也是赋值给$this->dtp->CTags[$this->Count] = $CDTag; * 3.如果系统开启了模板缓存,调用$this->dtp->SaveCache(),保存解析后的模板文件数组 * waning: * $this->dtp->CTags数组,是分离出的各个标签及标签的属性 */ /* $this->dtp->CTags数组的元素,每个都是一个dedetag对象 Array( [0] => DedeTag Object ( [IsReplace] => [TagName] => global [InnerText] => [StartPos] => 236 [EndPos] => 264 [CAttribute] => DedeAttribute Object ( [Count] => 0 //从0开始的,一般我们计数都是从1开始 [Items] => Array ( [name] => cfg_soft_lang ) ) [TagValue] => [TagID] => 0 ) ) */ /* 模板标签匹配出来,需要对解析出来的标签执行,返回结果,并替换! arc.partview.class.php中 1.调用 'parseTemplet()',里面核心调用的是:include/channelunit.func.php中的MakeOneTag()这个函数 对 field、include/taglib/*.lib.php的标签,进行赋值操作!注意,赋值是将值,保存到了 $this->dtp->CTags->TagValue中 2.调用 'SaveToHtml()' | 'Display()',保存并输出或直接输出最终的结果,核心调用的是:include/dedetag.class.php中的GetResult()方法,它里面还有一个重要的方法,我们得需要知道:AssignSysTag()-解析其他的特殊标记 例如:global,include,foreach,var等,以及这些所有标签里包含 'runphp' 属性的,都会调用RunPHP()方法来处理标签 3.进行标签替换了,得到最终的结果! */
0 0
- dedecms讲解
- dedecms一些常用的标签属性讲解
- DedeCMS搜索模块的样式讲解
- DedeCMS常用标签讲解笔记整理
- 百度社区超级版主讲解Dedecms网站移动化seo
- 教程讲解dedecms动态编译式模版引擎
- dedecms讲解-dedetag.class.php文件分析
- dedecms
- dedecms
- dedecms
- dedecms
- dedeCMS
- dedecms
- dedecms
- dedecms
- dedecms
- dedecms
- DedeCMS
- Spring MVC 入门总结
- 对象存入session中时,未序列化报错的问题
- use after free 引起KE
- 在Androidstudio中查看源码时,发现进入的源码没有注释
- 反编译出现internal error
- dedecms讲解
- php 桥接模式案例
- c++跨平台技术学习(三)--使用标准API
- java-基本的Socket编程-实现服务器端和客户端通信
- iOS10注册极光推送
- 使用jedis 链接redis数据库
- Python request 普通请求的链接不断变成TIME-WAIT的问题
- UIButton背景半透明,字体不透明的实现效果
- Spring之LoadTimeWeaver——一个需求引发的思考