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 相关文章推荐
PHP4实际应用经验篇(2)
Oct 09 PHP
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
PHP 事件机制(2)
Mar 23 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
laravel实现前后台路由分离的方法
Oct 13 PHP
PHP中SESSION过期设置
Mar 09 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
Zerg剧情介绍
2020/03/14 星际争霸
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
求职者应聘的自我评价
2013/10/16 职场文书
在求职信中如何凸显个人优势
2013/10/30 职场文书
中学生家长评语大全
2014/04/16 职场文书
夏季药店促销方案
2014/08/22 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
关于倡议书的范文
2015/04/29 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
财务人员入职担保书
2015/09/22 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python