thinkphp自定义标签

我也没用过这个功能,就看了下手册,我就把我理解的东西写出来给大家看看吧
首先,自定义标签库应该位于 Thinkphp/Extend/Driver/TagLib  目录下
第一步:新建标签类库文件名为  TagLibTest.class.php  ,手册中没讲文件命名方式,我猜应该是这样的,Test为自定义标签库名。 

第二步:编辑刚才建的类库文件,新建一个类,集成TagLib父类

class TagLibTest extends TagLib{




第三步:在类中声明一个protected成员变量$tags
class TagLibTest extends TagLib{

    protected  $tags  =array(
        ' article '=>array(' attr '=>'num,typeid',' close '=>'1'),
         /*
            这里$tags数组内,每个单元也就是每一行代表一个标签,例如{dede:article},我们这里也定义了一个article,在test标签库里,所以就是{Test:article}, 然后每一行标签的键值就是标签名,value呢也是一个数组,该数组包含两个单元,第一个就是attr,就是标签中得属性,以逗号分隔,如num, typeid等等,close的值如果是0的话就是闭合标签,1的话就是不闭合,意思是要以{/Test}来结尾。
        */

    );

}

第四步:定义了标签后,我们需要实现标签的功能,这里直接在类文件下声明一个函数,以_开头,以标签名 article 结尾的函数名

public function _article($attr,$content){
/*
$attr这个参数代表的就是标签中得attr,标签属性;
$content这个在close=1的时候有用,即 {test:article}.....$content..... {/test:article}标签中包含的内容
*/

$tag     =  $this -> parseXmlAttr ( $attr , 'article' );   //这一步强制的,就是将article标签的attr解析出来,取得标签每个参数的值

$num=$tag['num'];
$typeid=$tag['typeid']; //就是这样,取得了num值和typeid值,{test:article num='9'  typeid='1'}......{/test:article}

/*

理论上到了这里我们就开始处理信息然后直接return一个字符串就OK了,但是为了实现该标签下循环取数据,还得稍微做点工课
假设我们标签中的content是类似dede的这种[field.字段]的方式{test:article num='9'  typeid='1'}文档ID:
[filed.id]   , 文档名: [field.name]  <br>{/test:article},我们下面开始实现循环

*/ 

$article=M('Article'); //实例化文章表的模型
$arts=$article->where("typeid=$typeid")->limit("0,$num")->select(); //根据传进来的typeid和num查询表
$str=""; //初始化str变量,最后返回用的
//
//重点来了,我们对结果集做一个循环  
      
for($i=0;$i<count($arts);$i++){
    $c=str_replace( array("[filed.id]","[filed.name]") , array($arts[$i]['id'],$arts[$i]['name']) , $content ); //将content中得[filed.xx]替换成结果集中的变量
    $str.=$c; //将替换后的字符串拼接到$str
}
//
//

return $str;//将处理完毕的字符串返回,也就是输出到模板中
}

第五步:使用自定义标签
首先你得在模板中引入你得自定义标签库 <taglib   name = 'Test'   />

建议使用一个单独的模板文件,用于自定义标签库的声明,include包含即可,方便管理

标签的使用:

<Test:article num=10 typeid=2>
文档ID:[filed.id] <br>
文档名:[filed.name]<br>
</Test:article>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值