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
详解:――如何将图片储存在数据库里
Dec 05 PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
PHP写UltraEdit插件脚本实现方法
Dec 26 PHP
php实现rc4加密算法代码
Apr 25 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
php实现建立多层级目录的方法
Jul 19 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
最简单的PHP程序--记数器
2006/10/09 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
javascript编程起步(第五课)
2007/01/10 Javascript
在html页面上拖放移动标签
2010/01/08 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
中止javascript执行的方法
2014/02/14 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
django orm模块中的 is_delete用法
2020/05/20 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
公务员个人自我评价分享
2013/11/06 职场文书
英文简历自荐信范文
2013/12/11 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
公司聘任书模板
2014/03/29 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
工作一年自我鉴定
2019/06/20 职场文书