通过标签可以扩展解析php或者html
每个标签库对应一个标签驱动类。
驱动的扩展目录位于 Extend/Driver/TagLib TagLib+标签库名称(首字母大写)
具体参考ThinkPHP3.0完全开发手册。
首先需要定义标签库的标签定义,标签定义包含了所有标签库中支持的所有标签,定义方式如下:
protected $tags = array(
// 定义标签
'input'=>array('attr'=>'type,name,id,value','close'=>0), // input标签
);
标签库的所有支持标签都在tags属性中进行定义,tags属性是一个二维数组,每个元素就是一个标签定义,索引名就是标签名,采用小写定义,调用的时候不区分大小写。
每个标签定义支持的属性包括:
属性名 | 说明 |
attr | 标签支持的属性列表,用逗号分隔 |
close | 标签是否为闭合方式 (0闭合 1不闭合),默认为不闭合 |
level | 标签的嵌套层次(只有不闭合的标签才有嵌套层次) |
alias | 标签别名 |
定义了标签属性后,就需要定义每个标签的解析方法了,每个标签的解析方法在定义的时候需要添加“_”前缀,可以传入两个参数,属性字符串和内容字符串(针对非闭合标签)。必须通过return 返回标签的字符串解析输出,在标签解析类中可以调用模板类的实例。下面是一个input解析方法的定义:
public function _input($attr,$content) {
$tag = $this->parseXmlAttr($attr,'input');
$name = $tag['name'];
$id = $tag['id'];
$type = $tag['type'];
$value = $this->autoBuildVar($tag['value']);
$str = '<input type="'.$type.'" id="'.$id.'"name="'.$name.'" value="'.$value.'" />';
return $str;
}