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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值