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 相关文章推荐
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
解析PHP多种序列化与反序列化的方法
Jun 06 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
利用 fsockopen() 函数开放端口扫描器的实例
Aug 19 PHP
php strftime函数的详细用法
Jun 21 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 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 MPDF中文乱码的解决方式
2015/12/08 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
php 可变函数使用小结
2018/06/12 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python MD5加密实例详解
2017/08/02 Python
分享6个隐藏的python功能
2017/12/07 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
深入浅析python的第三方库pandas
2020/02/13 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
python实现密码强度校验
2020/03/18 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
python如何进入交互模式
2020/07/06 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
回门宴答谢词
2014/01/13 职场文书
2014新年寄语
2014/01/20 职场文书
运动会获奖感言
2014/02/11 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python