dedecms代码研究七
简单回顾一下,前面我们首页动态文件index.PHP调用arc.partview.class.php来初始化首页模板
arc.partview.class.php通过SetTemplet调用DedeTagParse,在设置首页模板的时候,解析了模板,并生成模板的缓存或者说序列化文件。虽然模板被解析了,但是这种解析的只是把所有标签在模板中的位置以及他们的参数记录下来,并没有填充数据,接下来估计就要干这些事情了。
我们回到partview的SetTemplet方法,从$this->dtp->LoadTemplet($temp);这句往下看吧。
下面if($this->TypeID > 0)这个if语句是设置当前页面的“面包屑导航”和标题。如果你使用过dedecms,对dedecms系统的操作比较熟悉,应该了解这个if里面的$this->Fields['title']这种数组元素,在页面模板中很多地方都是用了fields数组呢。
设置了两个变量,接下来就调用ParseTemplet解析模板啦。
这个ParseTemplet很简单,设置了一大堆全局变量,一看就知道了,页面里面用的什么channelid,topid之类的东西,有兴趣的朋友可以自己细致研究一下。我们注意到ParseTemplet方法最后一句,MakeOneTag($this->dtp,$this); 因为前面的东西都是没什么实质性的,这个应该很关键了。找到这个函数看看吧。
先看看MakeOneTag函数的参数,前两个参数都是引用传递的,第一个参数是传入DedeTagParse的实例,第二个参数是传入partview的实例。
开始用一个循环获取系统所拥有的所有标签列表
$dh = dir(DEDEINC.'/taglib'); while($filename = $dh->read()){ if(ereg("\.lib\.",$filename)){ $alltags[] =str_replace('.lib.php','',$filename); } } $dh->Close();
代码很简单,就是遍历/include/taglib目录,根据文件规则取文件名,形成一个所有标签的数组。
接下来就是一个大的foreach数组了,遍历在partview类中实例化并解析了当前模板的DedeTagParse的实例的CTags属性,我们通过前面对DedeTagParse的分析知道CTags实际上是模板中所有使用的标签及其参数的集合而已,这里就开始遍历这些模板上的标签进行赋值,替换之类的啦。
我们继续看这个foreach都干了什么。
先获取循环中当前标签的名字。
接下来是针对标签名为field的标签的操作。
如果是field标签的时候,先获取标签的name属性,当名字是array的时候则通过DedeTagParse的Assign方法把partview的Fields数组赋给标签名对应的值属性(详情看Assign的代码,由于比较简单这里略过)。如果标签name属性不是array,则把partview的Fields数组中指定名字的值赋给标签对应的值。下面的else是进行一些其他判断也很简单,然后field标签就解析完了,这样我们就知道了field标签就是相当于变量,此处就是给这些变量赋值,解析完之后,就继续循环分析下个标签了。
接下来的两个if是做标签名字的兼容性了,我们看到arclist有一堆标签名字~
再接下来就是看看模板中的标签是否有对应的系统标签了,如果有,就载入对应的文件,调用对应的函数,把函数返回值赋值给模板标签对应的值。
这样,整个模板的标签就完成赋值了。
至于系统中那些标签(/include/taglib/下的那些标签解析文件)其实就是一个函数,里面读取数据库数据,组织数据,输出而已。
这节就到这里了,主要讲了分析好的模板标签如何绑定最终数据的。其实比较简单,因为模板分析的时候已经得到了当前模板所使用的全部标签,接下来只要遍历标签,调用不同的标签函数,获取函数返回数据就行了。
有些细心的朋友会发现,到这里其实还没有完,数据什么的都得到了,接下来呢?是如何生成静态文件的?
这就是下一节要讲的东西啦。
附:dedecms(v5.6)系统目录
a /* 生成HTML的目录 */
|data /* 程序生成常用数据保存目录 */
| |admin /* 保存系统后台常规配置,例如作者、快速导航、来源,以文本格式存放*/
| |backupdata /* 数据库备份存放目录,可以在系统后台设置处修改 */
| |cache /* 系统缓存 */
| |enums /* 联动类别生成的缓存和js文件*/
| |js /* 栏目js调用生成的js文件 */
| |mark /* 图片水印设置目录 */
| |module /* 系统后台那些模块安装包存放的目录,通常文件名称加密过 */
| |rss /* 生成RSSmap存放的文件目录 */
| |sessions /* 系统sessions存放目录,登陆后就会生成个session,目录需可写*/
| |textdata /* 文本数据,系统后台保存为文本数据存放目录 */
| |tplcache /* 模板缓存目录,这个缓存一般是那些动态页 */
| |ziptmp /* 压缩缓存目录 */
|dede /* 系统后台管理目录 */
| |img
| |inc
| |js
| |templets /* 系统后台的模板存放目录 */
|images
| |js
| |swfupload
| | |images
| | |plugins
|include /* 系统核心类库、函数存放目录 */
| |calendar /* 日历控件,就是日期编辑框跳出来的那个日历框 */
| |code /* datalistcp动态分页类的编码语言包 */
| |data /* 系统核心设置的数据,比如词库默认验证码 */
| |dialog /* 系统对话框存放目录,编辑器上面选择的类似于缩略图、插入图片文件*
| | |img
| |FCKeditor /* 编辑器存放目录,用的是开源编辑器FCK */
| | |editor
| | | |css
| | | | |images
| | | |dialog
| | | | |common
| | | | |fck_about
| | | | |fck_codes
| | | | |fck_flash
| | | | |fck_image
| | | | |fck_link
| | | |dtd
| | | |images
| | | | |smiley
| | | |js
| | | |lang
| | | |skins
| | | | |images
| |inc /* 这里存放一些用才引入的比较长的函数 */
| |taglib /* 就是那些用在模板中的标签存放的目录了 */
| | |channel /* 解析一些特殊字段的扩展函数库 */
| | |help /* 基本的标签说明 */
| |tpllib /* 动态模板标签,一般用在动态调用页面上面的标签 */
|install /* 安装目录 */
| |images
| |templates
|member /* 会员中心目录 */
| |images
| | |pay
| |inc /* 会员中心*/
| |js
| |paycenter /* 支付接口配置 */
| | |alipay
| | |cbpayment
| | |nps
| | |tenpay
| | |yeepay
| |space /* 会员中心的空间模板 */
| | |coffee
| | | |images
| | |company
| | | |images
| | |flower
| | | |images
| | |gray
| | | |images
| | |lxblog
| | | |images
| | |lxbrown
| | | |images
| | |lxvista
| | | |images
| | |person
| | | |blue
| | | |common
| | | | |css
| | | | |images
| | | |images
| | |pwblue
| | | |images
| | |pwglight
| | | |images
| | |pwlake
| | | |images
| | |pwpink
| | | |images
| |templets
|plus /* 系统插件存放目录 */
| |guestbook /* 留言板插件*/
| | |images
| |img
| | |face
| |paycenter
| | |alipay
| | |cbpayment
| | |nps
| | |tenpay
| | |yeepay
| |task
|special /* 专题存放目录 */
|templets /* 织梦模板存放目录 */
| |default /* 系统默认模板目录 */
| |images
| | |mood
| | |photo
| |js
| |style /* 默认模板存放的CSS样式 */
| |plus /* 插件页面的模板文件存放目录 */
| |system /* 系统核心底层模板文件夹 */
| |wap /* 那个wap模块的样式目录了 */
|uploads /* 文件上传存放目录 */
| |allimg /* 图片 */
| |flink /* 友情链接图片 */
| |litimg /* 缩略图*/
| |media /* 多媒体存放目录 */
| |soft /* 软件*/
| |userup /* 用户文件存放,例如头像 */
dedecms代码研究七的更多相关文章
- dedecms代码研究二
dedecms代码研究(2)从index开始现在继续,今天讲的主要是dedecms的入口代码.先打开index.PHP看看里面是什么吧.打开根目录下的index.php嗯映入眼帘的是一个if语句.检查 ...
- dedecms代码研究五
上一次留几个疑问: 1)DedeTagParse类LoadTemplet方法. 2)MakeOneTag到底在搞什么. 从DedeTagParse开始前面,我们一直在dedecms的外围,被各种全局变 ...
- dedecms代码研究四
partview php文件之前,我们像掉进沼泽一样,看到无尽的变量,数组元素,莫名其面的东西摆在我们面前.今天,我们继续艰难前行,想办法走出partview类的泥潭.上一篇,我们胡乱分析了partv ...
- dedecms代码研究一
dedecms相信大家一定都知道这个cms系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他cms系统比较难模仿的的东西,这个东 ...
- dedecms代码研究六
今天讲的是dedecms最关键的东西,模板分析啦.也就是dedetag.class.php 里面的ParseTemplet方法 模板解析方法 先看看一个dedecms标签,大家心里有个数: {dede ...
- dedecms代码研究三
上次,我们从dedecms的index.PHP文件中了解到了很多信息,也提出了一些问题: 1)加载了/include/common.inc.php,里面做了哪些工作? 2)/include/arc.p ...
- (转)dedecms代码详解 很全面
dedecms代码研究(1)开篇dedecms 相信大家一定都知道这个cms 系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他 ...
- dedecms代码详解 很全面
dedecms代码研究(1)开篇dedecms 相信大家一定都知道这个cms 系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他 ...
- CWMP开源代码研究——git代码工程
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
随机推荐
- OrCAD搭建Access数据库
刚进入到一个小公司,接到的第一个电路设计的案子是从零开始的,辛苦就不说,关键是这么不严谨,容易出错,于是乎,问题来了,能否从零开始着手建立个类似于以前公司的数据库,管理原理图封装,PCB封装及规格书! ...
- C语言获得数组长度的函数
<转自百度知道> 1.c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数). 例如: int data[4]; int length; length=sizeof(d ...
- UIkit框架之UIPickerView
1.继承链:UIview:UIResponder:NSObject 2.获取uipicker view的属性 (1)@property(nonatomic, readonly) NSIntegernu ...
- 黑马程序员——【Java基础】——GUI(图形用户界面)
---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.GUI(GraphicalUser Interface):又称图形用户界面,是计算机用户与计 ...
- My first Scratch small game
My first Scratch small game:https://scratch.mit.edu/projects/62700370/ PC or Mac only. Browser & ...
- swift项目中使用OC/C的方法
假如有个OC类OCViewController : UIViewController类里有两个方法 //swift调用oc或c的混编是比较常用的,反过来的调用很少.这里只写了swift调用oc和c的方 ...
- phalcon:跟踪sql语句
在phalcon里有一个\Phalcon\Db\Profiler 类,这个类可以用来记录sql语句并计算消耗的时间.那么如何使用它呢? 手册里其实已经提供了方法,总结如下: 1.向$di里注册prof ...
- PHP Html5上传大文件
html前台代码: <form id="upload_form" name="upload_form" action="javascript:i ...
- Smart210学习记录-----Linux i2c驱动
一:Linux i2c子系统简介: 1.Linux 的 I2C 体系结构分为 3 个组成部分: (1) I2C 核心. I2C 核心提供了 I2C 总线驱动和设备驱动的注册.注销方法,I2C 通信方法 ...
- 数据获取以及处理系统 --- 功能规格说明书V2.0
产品规格说明书: 版本号: V2.0 版本说明: Version 1.0 简单得需求分析以及构思,初稿形成 Version 2.0 细化beta阶段设计,增加典型用户尝尽以及功能罗列 1. 引言 1. ...