标签库

ThinkPHP 模版中的标签库,我们使用的很多内置标签就是
通过标签库声明而来的,当然还可以自定义扩展标签。

一.内置标签

模版中的这些内置标签是是在  ThinkPHP/Library/Think/Template/TagLib  下

在完整版中提供了两个类文件: Cx.class.php (内置标签核心类)、 Html.class.php (html 扩展标签)

观察  Cx.class.php  源码,我们发现其实就是内置标签的核心类。比如:

 1 /**
 2      * volist标签解析 循环输出数据集
 3      * 格式:
 4      * <volist name="userList" id="user" empty="" >
 5      * {user.username}
 6      * {user.email}
 7      * </volist>
 8      * @access public
 9      * @param array $tag 标签属性
10      * @param string $content  标签内容
11      * @return string|void
12      */
13 public n function _volist($tag,$content) {
14             //核心代码省略
15 }

在 ThinkPHP 中,Cx.class.php 是自动加载的,所以并不需要各种配置或引入而可以直接编写标签代码即可运行。

但如果是 Html.class.php 这种扩展性标签库,则需要通过其他方式才可以运行:

 1 /**
 2      * select标签解析
 3      * 格式: <html:select options="name" selected="value" />
 4      * @access public
 5      * @param array $tag 标签属性
 6      * @return string|void
 7      */
 8     public function _select($tag) {
 9            //核心代码省略
10 }

如果要使用 Html.class.php 的扩展标签,那么首先要导入这个标签:

在 View/User/index.html 中导入:

1 //导入扩展标签
2  <taglib name="html" />

在使用标签的时候,前面需要加上html:,表示这个是html标签库

1  <html:select options="name" selected="value" /> 

PS:Cx.class.php 因为是内置标签,所以不需要加 Cx:,但 Html.class.php 则需要
加上 html:,否则会无法解析标签。

在 WeiBo/Common/Conf/config.php 中将Cx和Html都设置为内置标签

1 ‘TAGLIB_BUILD_IN‘=>‘cx,html‘,
1 //设置成内置标签,则不需要 html:了
2 <select options="name" selected="value" />

PS:设置内置标签有一定的危险性,因为可能会出现标签的重复导致冲突。就比如select标签,本来就属于html内的标签,所以调用 Html.class.php 就会产生冲突了。

如果没有设置为内置标签的话,那么都需要通过 tablib 进行导入,我们可以设置标签
预加载。这样,就不需要每次都进行导入操作了。

在 WeiBo/Common/Conf/config.php 中插入代码:

1 //标签预加载
2 ‘TAGLIB_PRE_LOAD‘=>‘html‘,

使用时在 Html.class.php 或者 Cx.class.php 里的调用标签的注释中查看调用格式,编译后的格式可在 Runtime/Cache/Home 中的缓存文件中查看。

二.扩展标签库

有时感觉内置的标签不能满足项目日益繁杂的项目需求,这是可能想自己扩展一些标签
来使用,那么自己怎么扩展标签呢?

第一步:在 Think/Library/Think/Template/TagLib 下创建一个 Test.class.php

顶部的三行和 Cx.class.php 的顶部三行是一样的:

 1 namespace Think\Template\TagLib;
 2 use Think\Template\TagLib;
 3 defined(‘THINK_PATH‘) or exit();
 4 /**
 5  * Test标签库驱动
 6  */
 7 class Test extends TagLib{
 8     // 标签定义
 9     protected $tags   =  array(
10         ‘mytest‘    => array(‘attr‘=>‘color,border‘,‘close‘=>1),
11         );
12     public function _mytest($tag,$content) {
13         $color=‘‘;
14         $border=‘‘;
15         if(isset($tag[‘color‘])) {
16             $color=‘color:‘.$tag[‘color‘];
17         }
18         if(isset($tag[‘border‘])) {
19             $border=‘border:‘.$tag[‘border‘];
20         }
21         $css=$color.‘;‘.$border;
22         return ‘<div style="‘.$css.‘">‘.$content.‘</div>‘;
23     }
24 }

其实就是跟着其他两个的格式来写就好。

其中 ‘close‘=>1 是双标签,就是在引用标签的时候要收尾,比如在 View/User/index.html 引用时:

1 <Test:mytest color="red" border="5px solid blue">测试标签</Test:mytest>

后面必须加上 </Test:mytest> ,否则就引用不成功

其中  function _mytest($tag,$content)  的 $tag 就是获取 View/User/index.html 中的 color="red" border="5px solid blue" ,

可以在  function _mytest($tag,$content)  中使用  echo $tag;  来获得它的属性, $content 则是 View/User/index.html

中的“测试标签”

结果如下图:

另外当是否成功引用 ThinkPHP/Library/Think/Template/TagLib 下的文件时,可在调试工具下的文件中查看到:

时间: 2024-11-07 23:42:51

标签库的相关文章

javaweb学习总结(二十六)——jsp简单标签标签库开发(二)

一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素. WEB容器在处理简单标签的标签体时,会把标签体内容用一个JspFragment对象表示,并调用标签处理器对象的setJspBody方法把JspFragment对象传递给标签处理器对象.JspFragment类中只定义了两个方法,如下所示: getJspCon

略识JSTL标签库

JSTL(Java Standard Taglib Langage): 只要使用该标准标签库的函数和标签,都可以在任何支持JavaEE规则的服务器中运行,无需修改代码.反之,为非标准标签库. JSTL核心标签(core标签): <c:out>  向浏览器输出内容.(注意它的escapeXml属性,即是否要转义内容.如果是js代码,就不要转义) 例子:<% pageContext.setAttribute("osc","<script>window

UI标签库专题十三:JEECG智能开发平台 ckfinder(ckfinder插件标签)

1. ckfinder(ckfinder插件标签) 1.1. 参数 属性名 类型 描述 是否必须 默认值 name string 属性名称 是 null value string 默认值 否 null width string 显示图片宽(上传类型为Images时) 否 null height string 显示图片高(上传类型为Images时) 否 null buttonClass string 按钮样式 否 null buttonValue string 按钮文本 否 null upload

关于在jsp页面中使用/struts-tags标签库的迭代器时,从ValueStack获取参数使用EL的问题

情况复原下: 通过valuestack存了个user,然后页面里可以${user.sex}拿到男.${user.sex=='男'}拿到ture 但是在使用 <s:if text="${user.sex=='男'}">报错   <c:if text="${user.sex=='男'}">可以用 分析: 我们都知道Struts2是对request进行增强了的,在getAttribute()无法获取数据时,会从ValueStack中获取. 那么用s

Eclipse配置jstl标准标签库详解

安装JSTL1.2 日期:2017-06-27 下载jstl1.2版本,下载地址:http://repo2.maven.org/maven2/javax/servlet/jstl/ 用压缩包打开jstl1.2,一般开发只需要里面的五个*.tid文件,c.tld,fmt.tld ,fn.tld,sql.tld,x.tld 就OK了,如下图示: 把以上五个文件复制到项目工程的WEB-INF文件夹中,我的文件路径是:D:\A01\web.project\WebContent\WEB-INF 将jstl

JSTL标签库简介

JSTL叫做标准标签库,但实际上它是由5个功能不同的标签库组成.当使用标签库时,必须在jsp页面的顶部使用<%@  taglib %>指令定义引用的标签库和访问前缀.这5中标签库及taglib指令如下所示: (核心标签库)<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> (格式标签库)<%@ taglib prefix="fmt" uri

开发属于我们自己的标签库!

1.1. 如何进行自定义简单标签: 对于自定义标签而言,如果我们要想使用我们自己定义的简单标签我们必须了解下面的相关类及接口的关系!这样我们就可以开发我们自己的标签库了!下面我们来看一下吧! 我们只要实现SimpleTag接口的实现类SimpleTagSupport抽象类就可以了!在此我们先来了解一下 SimpleTag 接口中定义的方法: 1 public interface SimpleTag extends JspTag { 2 3 public void doTag() 4 throws

JSTL标签库:Remove标签Catch标签

看注释 <c:remove> 标签删除变量,无论是从指定的范围内或范围内的变量(如果没有指定范围).这个动作通常是不特别有帮助,但它可以帮助确保一个JSP范围内的资源,它负责清理. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!-- 核心标签: 核心组的标签是最常用的JSTL标签.以下是在您的JSP的语法包括JSTL核心库

JSP标准标签库

JSP标准标签库 JSP标准标签库(JSP Standard Tag Library,JSTL)是实现Web应用程序中常见的通用功能的定制标签库集,程序员使用JSTL标签来避免在JSP页面中使用脚本. JSTL概述 (1).JSTL英文全称是“JSP  Standard  Tag Library”,即JSP标准标签库之意. (2).JSTL是由JCP(JavaCommnunity Process)指定的标准规范,是一组形如html的标签. (3)JSTL提供了诸如循环.条件.数据库访问.XML处

第3章 Struts2的标签库

3.1 Struts2的OGNL     1.OGNL表达式基础 标准的OGNL会设定一个根对象(root对象).假设使用标准OGNL表达式来求值(不是Struts 2 OGNL),如果OGNL上下文有两个对象foo对象和bar对象,同时foo对象被设置为根对象(root),则利用下面的OGNL表达式求值. #foo.blah // 返回foo.getBlah() #bar.blah // 返回bar.getBlah() blah // 返回foo.getBlah(),因为foo为根对象 在St