ThinkPHP标签制作教程


Posted in PHP onJuly 10, 2014

本文以实例讲解了ThinkPHP标签的制作方法,对于ThinkPHP的初学者或者开发人员都有一定的借鉴价值。

一般来说,ThinkPHP的默认标签解析器在Lib/Template/TagLib/TagLibCx.class(2.1版本位于ThinkPHP/Lib/Think/Template/TagLib/TagLibCx.class.php)中,里面定义了常用的如volist php 等常用ThinkPHP的标签

这里我们就在这个类中添加一个<category>的标签解析。
 
一、标签格式:

<category parentid='0' ><{$cat.catname}></category>

二、标签作用:

循环输出父类id是parentid的栏目

三、操作步骤:

1.在tagLibCx.class 的私有属性中添加:

'category'=array('attr'=>'parentid',level=>3)

其中attr:标签的属性 level标签的嵌套层次
 
2.添加解析函数

标签的解析原理就是通过读取xml文件得到相应的信息,然后再拼凑成所需要的php源代码,最后通过echo 在页面上输出。

具体代码如下:

public function _category($attr,$content)
{
//把标签的所有属性解析到$tag数组里面
$tag = $this->parseXmlAttr($attr,'category');
//得到标签里面的属性
$parentid= $tag['parentid'];
//定义页面解析的变量
$result = !empty($tag['result'])?$tag['result']:'cat'; //定义数据查询的结果存放变量
$key = !empty($tag['key'])?$tag['key']:'i';
$mod = isset($tag['mod'])?$tag['mod']:'2';
//拼凑数据库查询语句 这里直接用了CategoryModel封装好的函数
$sql = "D('Category')->";
$sql .= "getCategorys(".$parentid.')';
//拼凑输出字符
$parsestr = '<?php $_result='.$sql.'; if ($_result): $'.$key.'=0;';
$parsestr .= 'foreach($_result as $key=>$'.$result.'):';
$parsestr .= '++$'.$key.';$mod = ($'.$key.' % '.$mod.' );?>';
$parsestr .= $content;//解析在category标签中的内容
$parsestr .= '<?php endforeach; endif;?>';
return $parsestr;
}

CategoryModel中的getCategorys方法:

/*
* 根据parentid得到栏目信息
* $parentid 父id
* $withSelf 是否包含自己
*/
public function getCategorys($parentid,$withSelf=0)
{
$parentid=intval($parentid);
$categorys=$this->where(array('parentid'=>$parentid,'ismenu'=>1))->order('listorder ASC')->select();
//包含自己
if($withSelf)
{
$categorys2=$this->where(array('id'=>$parentid,'ismenu'=>1))->limit(1)->select();
$category=array_merge($categorys,$categorys2);
}
return $categorys;
}

3.页面上的引用:

<category parentid='0'>
<{$cat.catname}>
</category>

这样一个标签就做好了!!就可以甩掉那个volist在页面上动态输出我们想要的东西了!

PHP 相关文章推荐
php 读取文件乱码问题
Feb 20 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
Zend Studio 实用快捷键一览表(精心整理)
Aug 10 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
php实现事件监听与触发的方法
Nov 21 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
php验证手机号码
Nov 11 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
laradock环境docker-compose操作详解
Jul 29 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
YII路径的用法总结
Jul 09 #PHP
YII实现分页的方法
Jul 09 #PHP
YII模块实现绑定二级域名的方法
Jul 09 #PHP
yii操作cookie实例简介
Jul 09 #PHP
Yii调试SQL的常用方法
Jul 09 #PHP
php判断GIF图片是否为动画的方法
Sep 04 #PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 #PHP
You might like
JS 网站性能优化笔记
2011/05/24 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
php实现的递归提成方案实例
2015/11/14 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
python实现的简单抽奖系统实例
2015/05/22 Python
python制作一个桌面便签软件
2015/08/09 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Python内置类型性能分析过程实例
2020/01/29 Python
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
北京SQL新华信咨询
2016/09/30 面试题
销售行业个人求职自荐信
2013/09/25 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
优秀毕业生求职信
2014/06/05 职场文书
物业保安岗位职责
2014/07/02 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
2014年客房部工作总结
2014/11/22 职场文书
授权委托书
2015/01/28 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
一条慢SQL语句引发的改造之路
2022/03/16 MySQL