Thinkphp 框架扩展之标签库驱动原理与用法分析


Posted in PHP onApril 23, 2020

本文实例讲述了Thinkphp 框架扩展之标签库驱动原理与用法。分享给大家供大家参考,具体如下:

Think\Template中标签库的体现是采用XML命名空间的方式。每个标签库对应一个标签库驱动类,每个驱动类负责对标签库中的所有标签的解析。

标签库驱动类的作用其实就是把某个标签定义解析成为有效的模版文件(可以包括PHP语句或者HTML标签),标签库驱动的命名空间位于 Think\Template\TagLib,标签库驱动必须继承Think\Template\TagLib类,例如:

namespace Think\Template\Taglib;
use Think\Template\TagLib;
Class Test extends TagLib{
}

首先需要定义标签库的标签定义,标签定义包含了所有标签库中支持的所有标签,定义方式如下:

protected $tags  = array(
 // 定义标签
 'input'  =>  array('attr'=>'type,name,id,value','close'=>0), // input标签
 'textarea' =>  array('attr'=>'name,id'),
 );

标签库的所有支持标签都在tags属性中进行定义,tags属性是一个二维数组,每个元素就是一个标签定义,索引名就是标签名,采用小写定义,调用的时候不区分大小写。

每个标签定义支持的属性包括:

属性名 说明
attr 标签支持的属性列表,用逗号分隔
close 标签是否为闭合方式 (0闭合 1不闭合),默认为不闭合
level 标签的嵌套层次(只有不闭合的标签才有嵌套层次)
alias 标签别名

定义了标签属性后,就需要定义每个标签的解析方法了,每个标签的解析方法在定义的时候需要添加“_”前缀,传入两个参数,对应属性数组和内容字符串(针对非闭合标签)。必须返回标签的字符串解析输出,在标签解析类中可以调用模板类的实例。下面是一个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>

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP动态图像的创建
Oct 09 PHP
php使用PDO方法详解
Dec 27 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
PHP自定义错误用法示例
Sep 28 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
PHP whois查询类定义与用法示例
Apr 03 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 #PHP
Thinkphp 框架扩展之类库扩展操作详解
Apr 23 #PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 #PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
Apr 22 #PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 #PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 #PHP
php模拟实现斗地主发牌
Apr 22 #PHP
You might like
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
jQuery 位置插件
2008/12/25 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
理解javascript封装
2016/02/23 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
python套接字流重定向实例汇总
2016/03/03 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
Python操作MySQL数据库的方法
2018/06/20 Python
python实现zabbix发送短信脚本
2018/09/17 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
python爬虫基础知识点整理
2020/06/02 Python
python怎么删除缓存文件
2020/07/19 Python
Python reques接口测试框架实现代码
2020/07/28 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
教师自查自纠工作情况报告
2014/10/29 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书