加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Thinkphp标签库驱动类的作用是什么,标签库咋用

发布时间:2023-05-10 13:57:58 所属栏目:PHP教程 来源:
导读:这篇文章主要介绍“Thinkphp标签库驱动类的作用是什么,标签库怎样用”,有一些人在Thinkphp标签库驱动类的作用是什么,标签库怎样用的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大
这篇文章主要介绍“Thinkphp标签库驱动类的作用是什么,标签库怎样用”,有一些人在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>
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!