dede 模板解析过程
程序员文章站
2022-05-25 18:29:39
...
分析模板解析过程
[
某栏目设置为:
最终列表栏目
内容模型--普通文章|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] );
}
}
}
}
[
某栏目设置为:
最终列表栏目
内容模型--普通文章|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] );
}
}
}
}
推荐阅读
-
vue 使用高德地图vue-amap组件过程解析
-
vue 的 solt 子组件过滤过程解析
-
Linux下将源文件编译成目标文件的过程解析
-
Android View measure layout draw 过程解析
-
sql获取存储过程返回数据过程解析
-
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
SpringBoot加载外部依赖过程解析
-
springmvc处理模型数据Map过程解析
-
python解析yaml文件过程详解