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 相关文章推荐
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
php获取301跳转URL简单实例
Dec 16 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
php简单防盗链实现方法
Jul 29 PHP
thinkPHP基于ajax实现的菜单与分页示例
Jul 12 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
May 24 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 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读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
写出高质量的PHP程序
2012/02/04 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
vue debug 二种方法
2018/09/16 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
python中Genarator函数用法分析
2015/04/08 Python
Python pickle模块用法实例
2015/04/14 Python
深入了解Python数据类型之列表
2016/06/24 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
保险专业大专生求职信
2013/10/26 职场文书
运动会解说词100字
2014/01/31 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
简易离婚协议书范本
2014/10/24 职场文书
中小企业员工手册范本
2015/05/14 职场文书
学校财务管理制度
2015/08/04 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python