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代码
Mar 08 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
常用的PHP数据库操作方法(MYSQL版)
Jun 08 PHP
PHP与SQL注入攻击防范小技巧
Sep 16 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
Jul 01 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 PHP
PHP项目多语言配置平台实现过程解析
May 18 PHP
基于PHP+mysql实现新闻发布系统的开发
Aug 06 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
php面向对象的用户登录身份验证
2017/06/08 PHP
PDO::errorInfo讲解
2019/01/28 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
python实现xlsx文件分析详解
2018/01/02 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
客户服务经理岗位职责
2014/01/29 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
大明湖导游词
2015/02/03 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
MySQL详细讲解变量variables的用法
2022/06/21 MySQL