欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

dede 模板解析过程

程序员文章站 2022-05-25 18:29:57
...
分析模板解析过程
[
   某栏目设置为:
最终列表栏目
内容模型--普通文章|article
列表模板--{style}/list_article.htm
]

http://www.dedeme.com/plus/list.php?tid=4  显示列表地址18:12 2013-1-17
以插件方式访问 list.php
栏目 tid=4

include(DEDEINC."/arc.listview.class.php");   //文档列表类
$lv = new ListView($tid);
{
栏目数据处理
模块载入
查询数据
解析模块
生成缓存
输出
}

栏目数据处理 {
new TypeLink($typeid);  /include/typelink.class.php  
初使化 查询栏目相关信息 dede_arctype(栏目信息表)  dede_channeltype(栏目信息分类 如普通文章、图片集)
}

如果是栏目是列表的话 会调用  $this->CountRecord();  分页 {
$cquery = "SELECT COUNT(*) AS dd FROM `#@__arctiny` arc WHERE ".$this->addSql;
dede_arctiny  // 该表是存放文档相关信息  (文档微表)
并载入模板文件
}
载入模板文件 {
include/dedetag.class.php
function LoadTemplate($filename) {
读取模板文件内容
当缓存模板数组内容存在且没有超过有效时间时载入 并 标记  $this->LoadCache
否则  对读取的内容处理 并解析模板特殊标识写入模板数组缓存 $this->ParseTemplet();
}

当缓存模板标识数组内容存在且没有超过有效时间时载入 并 标记 {
include/dedetag.class.php
循环标识数组 并 实例化 $ctag = new DedeTAg(); 写入  $this->CTags[$this->Count] = $ctag;
}
}

解析模板,对固定的标记进行初始给值  function ParseTempletsFirst(){
MakeOneTag($this->dtp,$this); 给块标记赋值
对  $this->CTag  循环标识
标识 field ({dede:field name='position'/})  是从载入原始对象 $refObj->Fields 中获取的

//由于考虑兼容性,原来文章调用使用的标记别名统一保留,这些标记实际调用的解析文件为inc_arclist.php
             if(preg_match("/^(artlist|likeart|hotart|imglist|imginfolist|coolart|specart|autolist)$/", $tagname))
            {
                $tagname='arclist';
            }
            if($tagname=='friendlink')
            {
               $tagname='flink';
            }
            if(in_array($tagname,$alltags))
            {
              $filename = DEDEINC.'/taglib/'.$tagname.'.lib.php';
              include_once($filename);
              $funcname = 'lib_'.$tagname;
              $dtp->Assign($tagid,$funcname($ctag,$refObj));
            }

            include/dedetag.class.php
   /**
     *  分配指定ID的标记的值
     *
     * @access    public
     * @param     string   $i  标签id
     * @param     string  $str  字符串
     * @param     string  $runfunc  运行函数
     * @return    void
     */
    function Assign($i, $str, $runfunc = TRUE)
    {
if(isset($this->CTags[$i]))
{
    $this->CTags[$i]->IsReplace = TRUE;
    $this->CTags[$i]->TagValue = $str;

    if( $this->CTags[$i]->GetAtt('function')!='' && $runfunc )
    {
$this->CTags[$i]->TagValue = $this->EvalFunc( $str, $this->CTags[$i]->GetAtt('function'),$this->CTags[$i] );
    }
}
    }

}