欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 织梦教程 > 浅谈dedecms模板引擎工作原理及自定义标签

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:736

高端HTML5响应式企业通用网

2020-05-06   浏览:518

html5响应式外贸网站英文版

2020-05-08   浏览:505

HTML5自适应律师工作室类网

2020-04-04   浏览:501

HTML5影视传媒文化公司类网

2020-05-12   浏览:495

浅谈dedecms模板引擎工作原理及自定义标签

发布时间:2021-01-28  

理解织梦模板引擎有什么意义?一方面可以更好地自定义标签。更多在于了解织梦系统,理解模板引擎是理解织梦工作原理的第一步。理解织梦会使我们写php代码时更顺手,同时能学习一些php代码的组织方式。

这似乎不是那么简单,如果你只想学习自定义标签,可以看一下“是否需要自定义标签”和““扩展标签””就够了。

一解析式引擎

如果你还没用过dedecms的标签,先用一下,也可以看一下“dedecms网页模板编写”。熟悉一下memberlist这个标签,下面会以这个标签为例。

织梦提供的模板分析引擎有解析式和编译式两种,由于现在主要使用前者,这里也只讨论前者。
 

先来写个模板解析的hello world 程序

***root/test.php  封面php(root指的是根目录,以下都假设dedecms被放在了网站的根目录)
 

<?php

    require_once (dirname(__file__).'/include/common.inc.php');

    //利用解析式模板所需的文件

    require_once (dirname(__file__).'/include/dedetag.class.php');

 

//生成解析模板引擎类对象

$dtp=new DedeTagParse();

//设置命名空间,由于下面的标签用tianya命名空间,所以要设置一下。

$dtp->SetNameSpace('tianya');

$dtp->LoadTemplate(dirname(__file__).' est.tpl.htm ');

 

//把标签替换成具体的值

foreach ($dtp->CTags as $id=>$tag)

{

    if($tag->GetName()=='my')

        //把id为$id的tag翻译成这是my标签<br/>

        $dtp->Assign($id,'这是my标签<br/>');    

    else if($tag->GetName()=='test')

        $dtp->Assign($id,'这是test标签<br/>');

}

 

//把解析好的html文本echo出来

$dtp->Display(); 

?>


***root/test.tpl.htm 网页模板

{tianya:my att1=1 att2='2'} [field:my/] {/tianya:my} {tianya:test att1=1 att2='2'} [field:test/] {/tianya:test}  



执行root/test.php就能查看结果

由上面的例子可以看出解析式模板运作的套路:

1php文件调用网页模板,并显示。

2htm文件提供网页的大体框架,等待数据来完善网页的具体内容,称为网页模板。

上面的代码就是把第一个标签(my标签)显示为这是my标签<br/>;第二个标签显示为这是test标签<br/>。

上面的代码是怎么办妥的

更改***root/test.php如下

<?php

    require_once (dirname(__file__).'/include/common.inc.php');

    //利用解析式模板所需的文件

    require_once (dirname(__file__).'/include/dedetag.class.php');

 

$dtp=new DedeTagParse();

//设置命名空间,由于下面的标签用tianya命名空间,所以要设置一下。

$dtp->SetNameSpace('tianya');

$dtp->LoadTemplate(dirname(__file__).' est.tpl.htm ');

var_dump($dtp);    //这是查看解析结果的重要方法

?>

***root/test.tpl.htm 网页模板

{tianya:my att1=1 att2='2'} [field:my/] {/tianya:my} {tianya:test att1=1 att2='2'} [field:test/] {/tianya:test}  

可以看到$dtp对象的内部结构,其中有一个DedeTag类的数组CTags,DedeTag类的定义见root/include/ dedetag.class.php。最好不要直接用DedeTag类的字段,而用DedeTag提供的函数。比如用tag1->GetName()而不是用tag1->TagName。花一小段时间就能把DedeTag类看完,这些语法在以后自定义标签时会有用。

再看一个例子,***root/test.php
 

<?php

    require_once (dirname(__file__).'/include/common.inc.php');

    require_once (dirname(__file__).'/include/dedetag.class.php');

 

function lib_my($att1,$att2)

{    

    return '这是my标签<br/>属性值'.$att1.$att2.'<br/>';

}

 

$dtp=new DedeTagParse();

$dtp->SetNameSpace('tianya');

$dtp->LoadTemplate(dirname(__file__).' est.tpl.htm');

 

foreach ($dtp->CTags as $id=>$tag)

{

    if($tag->GetName()=='my')    

$dtp->Assign($id , lib_my($tag->GetAtt('att1'),$tag->GetAtt('att2')));

}

 

$dtp->Display(); 

?>



***root/test.htm 网页模板

{tianya:my att1=1 att2='2'} [field:my/] {/tianya:my} {tianya:test att1=1 att2='2'} [field:test/] {/tianya:test}  

会发现模板解析中有四种“势力”

本文标签

:备案管家服务帮您把复杂流程变简单,解决您在进行网站备案过程中遇到的效率低下和成功率不高的问题。个人300/2个域名,企业500/5个域名,qq1650004.