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


Posted in PHP onJune 26, 2014

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

dedecms可以写成:

<ul>
{dede:arclist row='10' orderby='id desc' titlelen=''}
   <li>[field:title]</li>
{/dede:arclist}
</ul>

phpcms可以写成:

<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如下:

<?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页面调用方式:

<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>

配置文件:

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

控制器:

<?php
class IndexAction extends Action{
 public function index() {
  $this->display();
 }
}
?>

至此实现了自定义标签,在控制器中也不用写很多的代码了。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
请php正则走开
Mar 15 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
smarty的保留变量问题
Oct 23 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
php截取字符串函数分享
Feb 02 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
PHP利用二叉堆实现TopK-算法的方法详解
Apr 24 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
Jul 04 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 #PHP
使用ThinkPHP+Uploadify实现图片上传功能
Jun 26 #PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 #PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 #PHP
ThinkPHP实现一键清除缓存方法
Jun 26 #PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 #PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 #PHP
You might like
MVC模式的PHP实现
2006/10/09 PHP
用cookies来跟踪识别用户
2006/10/09 PHP
php中$this-&amp;gt;含义分析
2009/11/29 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
js实现目录定位正文示例
2013/11/14 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
巴西手表购物网站:eclock
2019/03/19 全球购物
小学音乐教学反思
2014/02/05 职场文书
班长自荐书范文
2014/02/11 职场文书
暑假家长评语大全
2014/04/17 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
社会实践单位意见
2015/06/05 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
关于Python使用turtle库画任意图的问题
2022/04/01 Python
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers