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.MVC的模板标签系统(二)
Sep 05 PHP
PHP 模拟登陆MSN并获得用户信息
May 16 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
php时区转换转换函数
Jan 07 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
Jan 24 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
PHP会话控制实例分析
Dec 24 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 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脚本
2006/11/26 PHP
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
PHP控制网页过期时间的代码
2008/09/28 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
Python单元和文档测试实例详解
2019/04/11 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
python实现实时视频流播放代码实例
2020/01/11 Python
python轮询机制控制led实例
2020/05/03 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
大学生职业生涯设计书
2014/01/02 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
文秘人员工作职责
2014/01/31 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
小学亲子活动总结
2014/07/01 职场文书
公路施工安全责任书
2015/05/08 职场文书
2019年工作总结范文
2019/05/21 职场文书