怎样自定义dede织梦标签的一次初探

织梦教程 强烈建议 2024-02-06 14:17 99 0

  代码如下:

  首先***行是获取标记之间的文本,这一点没有弄明白,标签之间文本以本人的理解,例如标签{dede:arclist}[field:arcurl/][field:title][field:description/]...{/dede:arclist},就是[field:arcurl/][field:title]

  [field:description/]...,也叫底层模板。但是有时候可能没有底层模板,也就是$innertext为空,这时,有的标签需要通过一个函数来把模板装入,即$innertext=GetSysTemplets('part_autochannel.htm');(参考channel.lib.php标签源码)。

  第二行:实例化 Dede织梦模板类,这个没有什么好说的,必须的。

  第三行:设置名子空间$ctp->SetNameSpace("field","[","]");即field,中括号是开始和结束符号,这个要注意,这个是底层模板的名字空间,而织梦标记的名字空间是dede,如果经常做二次开发的话,我们经常碰到。

  第四行:把$innertext载入模板字符串,这是织梦程序里面的原话,就这一句,刚开始研究的还真不好理解。

  接下来看foreach遍历一个标记数组,当标记为array时,一种处理方式,当标记不为array时,另一种处理方式,但不管哪种,$ctp->Assign($tagid, $row)即Assign分配指定ID的标记的值,这句也是织梦官方的话,简单理解意思是,就是获取标记的值,也就是通过Assign()这个方法,我们获得了这个标记id为$tagid的值,例如:标记title,通过$ctp->Assign($tagid, $row['title'])(即$row['title']==$row[$ctag->GetName()])得到了标记title的值。

  所以,$ctp->Assign($tagid, $xxx)是必须的。

  ***后,通过$ctp->GetResult()获取结果,赋给$reavle,并返回调用处,这时的$reavle的值才是真正的title值。

  区别:织梦标签和织梦标记,这二个东西,见到无数次,因为是仿站,所以,对这个没有在意也用不到,但是如果你去研究织梦底层源码的话,必须知道他们之间的区别,织梦标签指的是整个{dede:arclist}[][]{/dede:arclist} 织梦标记指的是:标签里面的arclist,title等,例如,{dede:global name='变量名称'/}这就是一个标签,而里面的global就是一个系统内置标记。

  本来想举一个具体的例子,但是由于篇幅太长,把例子放到下一个教程里吧,这个例子里面用的代码是在loop.lib.php万能循环标签里面的,其实,一般的标签第二大部分代码,完全没有这么复杂,如果大家要深度二次开发的话,那么,写织梦标签是必不可少的一步,这一点本人体会比较深,以前做的开发有好几个就用到自定义标签,当时,本人一点也不会,所以,都把单子给了别人,大家可以研究一下织梦那些标签源码,你会收获很多的。



时间:(2024-02-06 14:17:03)
本站资源均来自互联网或会员发布,如果不小心侵犯了您的权益请与我们联系。我们将立即删除!谢谢!