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 相关文章推荐
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
PHP 分页原理分析,大家可以看看
Dec 21 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
关于PHP求解三数之和问题详析
Nov 09 PHP
php 解析非标准json、非规范json
Apr 01 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 表单验证实现代码
2009/03/10 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
基于PHP常用函数的用法详解
2013/05/10 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
Python内置函数dir详解
2015/04/14 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
python处理数据,存进hive表的方法
2018/07/04 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python 标准差计算的实现(std)
2019/07/29 Python
Django 自定义分页器的实现代码
2019/11/24 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
教育学习自我评价
2014/02/03 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
开学典礼感言
2014/02/16 职场文书
企业党员公开承诺书
2014/03/26 职场文书
艺术节主持词
2014/04/02 职场文书
旅游活动总结
2014/08/27 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书