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生成自己的LOG文件
Oct 09 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
Laravel5权限管理方法详解
Jul 26 PHP
详解Laravel设置多态关系模型别名的方式
Oct 17 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
PHP文件打开关闭及读写操作示例解析
Aug 06 PHP
Cookie跨域问题解决方案代码示例
Nov 24 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 XML数据解析代码
2010/05/26 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
PHP 验证登陆类分享
2015/03/13 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
webpack打包js的方法
2018/03/12 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
Python是编译运行的验证方法
2015/01/30 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
python机器学习之贝叶斯分类
2018/03/26 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
办公室主任职责范文
2013/11/08 职场文书
计算机专业大学生的自我评价
2013/11/14 职场文书
企业口号大全
2014/06/12 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
感恩主题班会教案
2015/08/12 职场文书