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中的时间显示
Jan 18 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
Sep 23 PHP
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
php自动加载机制的深入分析
Jun 08 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
一组PHP加密解密函数分享
Jun 05 PHP
Laravel中使用自己编写类库的3种方法
Feb 10 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 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
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
Yii2增加验证码步骤详解
2016/04/25 PHP
PHP单链表的实现代码
2016/07/05 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
javascript字符串拼接的效率问题
2010/12/25 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
Django中使用group_by的方法
2015/05/26 Python
Python简单实现子网掩码转换的方法
2016/04/13 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
Python流程控制语句的深入讲解
2020/06/15 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
SQL Server面试题
2016/10/17 面试题
元旦晚会邀请函
2014/01/27 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
2014年社区工作总结
2014/11/18 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
导游词之太原天龙山
2020/01/02 职场文书