dede模版引擎工作原理和自定义标签

来源:互联网 发布:ps软件有哪些 编辑:程序博客网 时间:2024/05/14 21:20

dede模版引擎工作原理和自定义标签

(2014-05-10 09:43:51)
转载
标签:

it

分类:dede
昨天爬行的蜗牛给大家介绍了织梦的数据库类,今天在介绍下织梦模版引擎的工作原理。
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
0 0
原创粉丝点击