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 相关文章推荐
桌面中心(二)数据库写入
Oct 09 PHP
php读取xml实例代码
Jan 28 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
Jan 17 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
php合并js请求的例子
Nov 01 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
PHP自定义多进制的方法
Nov 03 PHP
php生成无限栏目树
Mar 16 PHP
php pdo连接数据库操作示例
Nov 18 PHP
Git命令之分支详解
Mar 02 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中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
Python连接Impala实现步骤解析
2020/08/04 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
汽车专业毕业生自荐信
2013/11/03 职场文书
人力资源总监工作说明
2014/03/03 职场文书
华山导游词
2015/02/03 职场文书
教师工作表现自我评价
2015/03/05 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技