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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
php继承的一个应用
Sep 06 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
php获取目标函数执行时间示例
Mar 04 PHP
php生成QRcode实例
Sep 22 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
PHP消息队列用法实例分析
Feb 12 PHP
PHP网页安全认证的实例详解
Sep 28 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 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 split()函数的用法详解
2013/06/05 PHP
php旋转图片90度的方法
2013/11/07 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
小程序实现分类页
2019/07/12 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
Python3实现购物车功能
2018/04/18 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
实例讲解Python3中abs()函数
2019/02/19 Python
简单了解python PEP的一些知识
2019/07/13 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
什么是命名空间(NameSpace)
2015/11/24 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
后备干部考察材料
2014/02/12 职场文书
我的长生果教学反思
2014/04/28 职场文书
服务理念口号
2014/06/11 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
mysql数据库实现设置字段长度
2022/06/10 MySQL
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android