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生成缩略图的类代码
Oct 02 PHP
php 文章采集正则代码
Dec 28 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
PHP会话处理的10个函数
Aug 11 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 PHP
PHP实现微信提现功能(微信商城)
Nov 21 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读MYSQL中文乱码的解决方法
2006/12/17 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
Python中zfill()方法的使用教程
2015/05/20 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
python实现简单名片管理系统
2018/11/30 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
Python Django 命名空间模式的实现
2019/08/09 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
HTML5实现签到 功能
2018/10/09 HTML / CSS
AmazeUI 网格的实现示例
2020/08/13 HTML / CSS
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
八荣八耻演讲稿
2014/09/15 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript