ThinkPHP自定义标签

简介:

   研究ThinkPHP自定义标签的时候,发现网上很多教程都很乱,官网又没有给出比较详细的方法,所以就自己研究了一下,现在将ThinkPHP的方法详细的记录下来。

   1.建立TP的项目,略过

   2.在config.php中加入'APP_AUTOLOAD_PATH'=>'@.TagLib',自动加载TagLib里面的文件

   3.在项目名称/Lib中建立TagLib文件夹

   4.在TagLib文件夹中新建一个TagLibXl.class.php文件(格式:TagLib自定义的名称,首字母大写)

   5.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
import( 'TagLib' );
class  TagLibXl  extends  TagLib{
     protected  $tags = array (
         'list' => array (
             'attr' => 'table,limit' ,    //设置标签属性
             'level' => '3' ,             //循环次数
             'close' => '1' ,             //是否闭合
                                                       
         ),
     );
                                               
     function  _list( $attr , $content ){
         $tag = $this ->parseXmlAttr( $attr 'list' );          //解析操作,TP的自定义标签是基于xml的
         $db =M( $tag [ 'table' ]);                //根据返回的table值实例化
         $list = $db ->limit( $tag [ 'limit' ])->select();             //查询返回数据
         preg_match_all( "/\[field\:\w*\]/" , $content , $match );      //获取返回值里[field:xxx]这种格式
         $match = $match [0];    
         $match = array_unique ( $match ); //去掉数组重复项
         foreach ( $match  as  $i => $vo ){
             $field [ $i ]= substr ( $vo ,7, count ( $vo )-2);
         }
         //以下循环为遍历将[field:xxx]格式替换为实际内容
         foreach ( $list  as  $i => $value ){
             if ( $i ==0){
                 $parseStr = $content ;
             } else {
                 $parseStr = $parseStr . $content ;
             }
             foreach ( $match  as  $j => $vo ){
                 $parseStr = str_replace ( $vo , $value [ $field [ $j ]], $parseStr );
             }
         }
         //解析内容模板,并返回字符串
         if (! empty ( $parseStr )) {
             return  $this ->tpl->parse( $parseStr );
         }
         return  ;
     }
}



在模板中使用方法:

1
2
3
4
5
6
< taglib  name = "xl"  />
< ul >
< xl:list  table = "Article"  limit = "0,3" >
     < li >< span >[field:id]</ span >< a  href = "" >[field:title]</ a ></ li >
</ xl:list >
</ ul >









本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1333525,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
SQL 安全 搜索推荐
ThinkPHP5中如何实现模板完全静态化
模板完全静态化,也就是通过模板完全生成纯静态的网页,相比动态页面和伪静态页面更安全更利于SEO访问更快。相比前二者各有利弊吧,现在稍微对这三种形式的优缺点对比一下,以及在ThinkPHP5项目中实现完全静态化的基本过程。
26 1
|
10月前
|
XML Java 程序员
自定义JSP标签
自定义JSP标签
|
11月前
|
存储 安全 Java
自定义JSP标签【下】
自定义JSP标签【下】
37 0
|
11月前
|
XML Java API
自定义JSP标签【上】
自定义JSP标签【上】
40 0
|
11月前
|
安全 Java
自定义JSP标签01
自定义JSP标签01
29 0
|
XML 搜索推荐 PHP
使用Laravel动态生成sitemap
Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。
194 0
ThinkPHP6.0使用twig作为模板引擎及自定义过滤器
ThinkPHP6.0使用twig作为模板引擎及自定义过滤器
177 0
|
Java
JSP第七篇【自定义标签就是如此简单】(修订版)(二)
为了简化标签开发的复杂度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。。 一般来说,实现了SimpeTag接口的标签称之为简单标签
78 0
JSP第七篇【自定义标签就是如此简单】(修订版)(二)
|
Java 容器
JSP第七篇【自定义标签就是如此简单】(修订版)(一)
为了简化标签开发的复杂度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。。 一般来说,实现了SimpeTag接口的标签称之为简单标签
130 0
JSP第七篇【自定义标签就是如此简单】(修订版)(一)
thinkphp5常用模板标签使用方法
thinkphp5常用模板标签使用方法
267 0