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

thinkphp2.1自定义标签的使用(官方文档不够详细)

2012-02-01 12:02 253 查看
下载新版thinkphp2.1 解压,有个doc文件夹,里面有Thinkphp2.1《自定义标签示例说明.pdf》。

1,建立标签解析类,如lib/TagLib/TagLibXXX.class.php

2,建立加载加载文件 conf/taglis.php

3,模版中使用。

官方文档有的内容我就不多讲了。

我说一下TagLibArticle.class.php这个文件。

代码结构可以分为两个部分。

一个tags属性定义标签。

若干了方法,定义解析过程。

1,tags属性中的参数说明一下。

定义标签的格式:

protected $tags = array(

// 标签定义:

//attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名level 嵌套层次

'tagname'=>array('attr'=>'attr1,attr2','level'=>3),

);

attr 参数不用说了, 定义属性列表(其实没有在上面定义过的属性也是能用的)

close是否闭合,为1表示闭合,你的标签必须成对出现,如 中间内容 ,

为0表示不闭合,如 , 不闭合的标签,在标签解析方法中不能获得内容。

alias 标签别名,一般用于简化某个复杂的标签。比如说thinkphp自带标签eq,gt,lt等标签的功能其实都可以用

compare标签属性,eq,gt,lt是compare标签的简化用户, 那么在定义compare标签时 它会有别名eq,gt,lt,注意也

要给别名定义解析方法。不多说了,再说又要举例子,又是一大堆代码,大家可以看看 官方标签是怎么定义的

Thinkphp/Lib/Think/Template/TagLib/TagLibCx.class.php

level 嵌套层次,实际是指嵌套次数。嵌套,就是一个标签里面还有这个标签。 如 中间

内容 中间内容 你如果设置level是1,嵌套使用两次的

会有一对标签不被解析, 如果你设置level为2,嵌套使用3次的话, 会有一对标签不被解析。一般嵌套的level都

是设置的3。 当然了 不闭合的标签不会有嵌套问题。

2,解析方法说明一下。

建立解析方法的格式

function _tagname($attr,$content){//前面两个参数是固定的,第一个是属性,第二个是内容,你可以在后面加

第三个,第四个参数,额外加的参数一般是给别名的解析方法用的。

$tag=$this->parseXmlAttr($attr);//一般都要解析标签属性

return $result ;//肯定要返回解析结果

}

解析方法中要注意2点。

1,分析代码是在解析模版时执行,还是在访问模版时执行。比如 你在解析方法中有读取数据库的代码,你如果不

把读取数据库的代码放在return 里面返回, 那只能在解析模版的时候才会执行, 访问网站的时候并没有读取数据

库。数据会很长时间不变。

2,注意return部分的php代码要用“php替代语法”。php正常语法有很多花括号, php替代语法就是把 左花括号“

{” 换成 冒号“:” 把右花括号“}” 换成以end开始的语句。你如果是if语句,就是endif,是foreach语句就是

endforeach。 为什么return部分 要用 php替代语法?我们知道 thinkphp 的变量标签也是有花括号的, 用替代

语法是为了 不影响变量标签的解析,php正常语法的花括号有可能会导致你的一些变量不能被正常解析。

大家可以看我发布的视频教程,http://www.3g4k.com/Index/articlecontent/id/29 第三部分就是专门解决thinkphp自定义标签的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: