昨天
爬行的蜗牛给大家介绍了织梦的数据库类,今天在介绍下织梦模版引擎的工作原理。
php文件 moban.php
require_once(dirname(__file__).'/include/common.inc.php');
//用织梦的一般都要引入这个文件
require_once(dirname(__file__).'/include/dedetag.class.php');
//解析模版所需要的文件
$dtp=new DedeTagParse(); //实例化类调用其中的方法
$dtp->LoadTemplate(dirname(__file__).'\test.tpl.htm'); //调用模版
foreach($dtp->CTags as $id=>$tag) //这里foreacid=>写成了->,注意这里写错了
{
if($tag->GetName()=='my')//这里的$tag->getname 能换成$dtp么
$dtp->Assign($id,'这是my标签
');
elseif($tag->GetName()=='test')
$dtp->Assign($id,'这是test标签
');
}
$dtp->Display(); //显示模版
其实观察上面的过程我们发现和smarty 原理基本一样都是调用模版 然后把变量变为php文件,最后输出文件
模版文件 test.tpl.htm
{dede:my att1=1 att2='2'}
[field:my/]
{/dede:my}
{dede:testatt1=1 att2='2'}
[field:test/]
{/dede:test}
好,我们看下输出的结果:
这是my标签
这是test标签
上面我们实现了最简单的。
下面爬行的我就再给大家解释下底层模版也就是[field:title]这样的是怎么实现的。
好,我们先看下php代码
require_once(dirname(__file__).'/include/common.inc.php');
require_once(dirname(__file__).'/include/dedetag.class.php');
$dpt=newDedeTagParse();
$dtp->LoadTemplate(dirname(__file__).'\test.htm');//这四条我就不解释了
functionlib_zoo(&$ctag)
{
$reval='这是my标签
属性值'.$ctag->GetAtt('att1').$ctag->GetAtt('att2').'
';
$innerText=$ctag->GetInnerText();
$dtp= newDedeTagParse();
$dtp->SetNameSpace('field','[',']');
$dtp->LoadSource($innerText);
$row['name']='xiaogou';
$row['animal']='dog';
foreach($dtp->CTags as$id=>$tag)
{
if($tag->GetName()=='name')
$dtp->Assign($id,$row['name']);
else if($tag->GetName()=='animal')
$dtp->Assign($id,$row['animal']);
}
$reval.=$dtp->GetResult().'
';
return$reval;
}
foreach($dtp->CTags as $id=>$tag)
{
if($tag->GetName()=='zoo')
$dtp->Assign($id,lib_zoo($tag));
}
$dtp->Display();
大家看完应该就不明白了,底层的就是多弄了一个函数,而且和上面的代码一样的,只不过是当作了一个新的用[,]这两个作为定界符而已。
模版文件:
{de
php文件 moban.php
$dtp=new DedeTagParse(); //实例化类调用其中的方法
$dtp->LoadTemplate(dirname(__file__).'\test.tpl.htm'); //调用模版
foreach($dtp->CTags as $id=>$tag) //这里foreacid=>写成了->,注意这里写错了
{
');
');
}
$dtp->Display(); //显示模版
其实观察上面的过程我们发现和smarty 原理基本一样都是调用模版 然后把变量变为php文件,最后输出文件
模版文件 test.tpl.htm
{dede:my att1=1 att2='2'}
好,我们看下输出的结果:
这是my标签
这是test标签
上面我们实现了最简单的。
下面爬行的我就再给大家解释下底层模版也就是[field:title]这样的是怎么实现的。
好,我们先看下php代码
require_once(dirname(__file__).'/include/common.inc.php');
require_once(dirname(__file__).'/include/dedetag.class.php');
属性值'.$ctag->GetAtt('att1').$ctag->GetAtt('att2').'
';
';
大家看完应该就不明白了,底层的就是多弄了一个函数,而且和上面的代码一样的,只不过是当作了一个新的用[,]这两个作为定界符而已。
模版文件:
{de