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 选项及相关信息函数库
Dec 04 PHP
PHP 变量类型的强制转换
Oct 23 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
php函数的常用方法及注意之处小结
Jul 10 PHP
浅析PHP的静态成员函数效率更高的原因
Jun 13 PHP
php关键字仅替换一次的实现函数
Oct 29 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP Web表单生成器案例分析
Jun 02 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
php中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
numpy.where() 用法详解
2019/05/27 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
python实现图像拼接
2020/03/05 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
工商管理实习生自我鉴定范文
2013/12/18 职场文书
工作检讨书怎么写
2014/10/10 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
MySQL 查询速度慢的原因
2021/05/25 MySQL