使用模板标签可以让网站前台开发更加快速和简单,使用过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的位置 @.表示当前文件夹下
|
控制器:
1
2
3
4
5
6
7
|
<?php
class IndexAction extends Action{
public function index() {
$this ->display();
}
}
?>
|
至此实现了自定义标签,在控制器中也不用写很多的代码了。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。