您的位置:首页 > 编程语言 > PHP开发

thinkphp自定义标签

2014-04-13 13:40 239 查看
我也没用过这个功能,就看了下手册,我就把我理解的东西写出来给大家看看吧
首先,自定义标签库应该位于 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkphp