weixin

织梦Dedecms index.php 文件流程分析

日期: March 11, 2019 作者:网站维护

本文忽略了一些情况,主要是说的动态显示模式下的情况,其他的情况也差不多。织梦并没用使用设计模式,简单直接的一个系统。只要学习一点PHP语言,知道模板引擎是做什么的,然后翻看一下源代码,就很容易理解。

和把大象关进冰箱一样,流程并不复杂,分三步:把模板文件里的标签找出来,把标签换成需要显示的内容,把替换后的内容显示出来。

把标签找出来是模板解释器做的事情,就是把下面这两种类似xml的标签找出来,主要是 DedeTagParse::ParseTemplet() 来实现的。

<dede:tagname color="red"/>

<dede:tagname color="red">
    content
</dede:tagname>

把标签换成需要显示的内容,就是调用标签对应的函数,其返回的值就是需要替换的内容。channelunit.helper.php/MakeOneTag() 来实现的。还有一些标记,比如global标记,是在后面的步骤的替换的。

流程

$pv = new PartView()
实例化一个PartView类为pv

$pv->SetTemplet("template path")
运行实例pv的方法-设置模板,参数为模板路径

$pv->Display()
运行实例pv的方法-显示最后的输出结果

PartView定义在arc.partview.class.php里

具体流程

PartView::SetTemplet() 
    DedeTagParse::LoadTemplet() 
        DedeTagParse::ParseTemplet() 
    PartView::ParseTemplet()
        channelunit.helper.php/MakeOneTag()
PartView::Display()
    DeDeTagParse::GetResult 
    DeDeTagParse::AssignSysTag()

DedeTagParse:parseTemplet() 细节

这个是一个模板标签解释器,具体什么意思呢?就是找到这两类标签的位置和相应的信息,比如有什么属性和内容。找到这些信息后,把这些属性放到一个数组里。

<dede:tagname color="red"/>

<dede:tagname color="red">
    content
</dede:tagname>

上面两种,一个是自闭合的,一个是有内容的。需要找到的信息就是:标签名是tagname,有一个属性color,color的值是red。第二个标签的包含的内容是“content”。

最后就是赋值,就是把这些标签替换成需要表示的内容。channelunit.helper.php的MakeOneTag()完成,其作用就是执行标签对应的函数,来获得需要显示的值。比如arclist这个标签,就会去tablib目录找到arclist.lib.php这个文件,然后执行里面的约定的一个函数名的函数得到的结果就是需要替换的内容。

广告内容为平台自动生成