本文实例讲述了thinkphp 框架扩展之标签库驱动原理与用法。分享给大家供大家参考,具体如下:
在think\template
中标签库的体现是采用xml命名空间的方式。每个标签库对应一个标签库驱动类,每个驱动类负责对标签库中的所有标签的解析。
标签库驱动类的作用其实就是把某个标签定义解析成为有效的模版文件(可以包括php语句或者html标签),标签库驱动的命名空间位于 think\template\taglib
,标签库驱动必须继承think\template\taglib
类,例如山东有什么山:
namespace think\template\taglib;u think\template\taglib;class test extends taglib{}
首先需要定义标签库的标签定义,标签定义包含了所有标签库中支持的所有标签,定义方式如下:
protected $tags = array( // 定义标签 'input' => array('attr'=>'type,name,id,value','clo'=>0), // input标签 'textarea' => array('尺attr'=>'name,id'浙江大学校花), );
标签库的所有支持标签都在tags属性中进行定义,tags属性是一个二维数组,每个元素就是一个标签定义,索引名就是标签名,采用小写定义,调用的时候不区分大小写。
每个标签定义支持的属性包括:
定义了标签属性后,就需要定义每个标签的解析方法了,每个标签的解析方法在定义的时候需要添加“_”前缀,传入两个参数,对应属性淄博职业学院数组和内容字符串(针对非闭合标签)。必须返回标签的字符串解析输出,在标签解析类中可以调用模板类的实例。下面是一个input解析方法的定义:
// input标签解析public function _input($tag,$content) { $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;}// textarea标签解析public function _textarea($tag,$content) { $name = $tag['name']; $id = $tag['id']; $str = '<textarea id="'.$id.'" name=甲烷燃烧的现象"'.$name.'">'.$content.'</textarea>'; return $str;}
定义好标签库扩展之后,我们就可以在模板中使用了,首先我们必须要告诉模板申明test标签库,用taglib标签,例如:
<taglib name='test' />
name属性支持申明多个标签库,用逗号分隔即可。申明test标签库之后,就可以使用test标签库中的所有标签库了,调用方式如下:
<test:input type='radio' id='test' name='mail' value='value' /><test:textarea id="content" name="content">$value</test:textarea>
注意:调用扩展标签库的标签的时候,必须加上标签库的xml命名空间前缀。
input标签定义value属性可以支持变量传入,所以value被认为是一个变量名,如果在控制器中已经给value模板变量赋值,例如:
$this->assign('value','my test value');
最后标签被模板引擎编译后,就会输出:
<input type='radio' id='test' name='mail' value='my test value' /><textarea id="content" name="content">my test vale</textarea>
本文发布于:2023-04-08 16:31:44,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/07d2a721a3ef354020a0a50c2a1b0f6f.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Thinkphp 框架扩展之标签库驱动原理与用法分析.doc
本文 PDF 下载地址:Thinkphp 框架扩展之标签库驱动原理与用法分析.pdf
留言与评论(共有 0 条评论) |