ThinkPHP模板自定义标签使用方法

这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下
 转之--http://www.jb51.net/article/51584.htm
 

使用模板标签可以让网站前台开发更加快速和简单,使用过dedecms、phpcms等内容管理系统的人应该都知道,cms的前台都是使用模板标签来调用数据。以调用文章列表为例:

dedecms可以写成:

?
1
2
3
4
5
<ul>
{dede:arclist row= '10' orderby= 'id desc' titlelen= '' }
      <li>[field:title]</li>
{/dede:arclist}
</ul>

phpcms可以写成:

?
1
2
3
4
5
6
7
<ul>
{pc:content action= "hits" catid= "6" num= "10" order= "views DESC" }
    {loop $data $r }
     <li>{ $r [title]}</li>
    {/loop}
{/pc}
</ul>

ThinkPHP的自定义标签同样能够实现这样强大的功能。ThinkPHP自定义标签通过TAG扩展库来实现。而ThinkPHP本身就自带了一个tag扩展库只要我们继承TagLib就能随心所遇的定义属于自己的标签。

命名规范:

TagLib+标签库名称.class.php

下面以实现调用导航为例加以说明

文件TagLibNav.class.php如下:

?
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
<?php
class TagLibNav extends TagLib {
   //attr 属性列表
   //close 是否闭合(0 或者1 默认1)
   //alias 标签别名
   //level 嵌套层次
   // 标签定义如下:
   protected $tags = array (
     'nav' => array ( 'attr' => 'limit,order' , 'level' => 3, 'close' =>1),
   );
   //定义查询数据库标签
   //attr是属性列表,$content是存储标签之间的内容的
   public function _nav( $attr , $content ) {
     $tag = $this ->parseXmlAttr( $attr , $content );
     $cate =M( 'Channel' );
     $tb = $cate ->order( $tag [ 'order' ])->limit( $tag [ 'limit' ])->select();
     $str = '' ;
     for ( $i =0; $i < count ( $tb ); $i ++)
     {
      $c = str_replace ( array ( "[filed:id]" , "[filed:name]" ), array ( $tb [ $i ][ 'id' ], $tb [ $i ][ 'name' ]), $content );
      $str .= $c ;
     }
     return $str ;
   }
}
?>

html页面调用方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< tagLib name = "nav" />     //必须在头部进行引用否则会出错
< html >
< head >
  < title >tablist</ title >
</ head >
< body >
   < div class = "nav" >
    < ul >
     < li >首页</ li >
     < nav:nav limit = '4' order = 'id asc' >
      < li >< a href = "[filed:id]" >[filed:name]</ a ></ li >
     </ nav:nav >
    </ ul >
  </ div >
  </ body >
</ html >

配置文件:

?
1
2
'APP_AUTOLOAD_PATH' => '@.TagLib' //TagLib的位置  @.表示当前文件夹下
'TAGLIB_BUILD_IN' => 'Cx,Nav' ,       //Cx是thinkphp基础类库的名称必须引用否则volist等标签就无法使用,Nav是自己定义的标签名称

控制器:

?
1
2
3
4
5
6
7
<?php
class IndexAction extends Action{
   public function index() {
     $this ->display();
   }
}
?>

至此实现了自定义标签,在控

你可能感兴趣的:(thinkphp)