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文件怎么打开 如何执行php文件
Dec 21 PHP
PHP file_exists问题杂谈
May 07 PHP
基于PHP静态类的原罪详解
May 06 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
Yii框架form表单用法实例
Dec 04 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 PHP
phpfpm的作用和用法
Oct 10 PHP
TP5框架安全机制实例分析
Apr 05 PHP
PHP array_reverse() 函数原理及实例解析
Jul 14 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
浅析Yii2缓存的使用
2016/05/10 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
用Python进行基础的函数式编程的教程
2015/03/31 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
大学生志愿者感言
2014/01/15 职场文书
运动会四百米广播稿
2014/01/19 职场文书
转让协议书范本
2014/04/15 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
庆祝儿童节标语
2014/10/09 职场文书
2014年审计工作总结
2014/11/17 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
调任通知
2015/04/21 职场文书
python pygame入门教程
2021/06/01 Python
opencv检测动态物体的实现
2021/07/21 Python
MySQL中order by的使用详情
2021/11/17 MySQL