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
php 表单验证实现代码
Mar 10 PHP
php 数组的一个悲剧?
May 11 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
php ci框架验证码实例分析
Jun 26 PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 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 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
Vue渲染函数详解
2017/09/15 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
使用Python中的tkinter模块作图的方法
2017/02/07 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
Python异常处理机制结构实例解析
2020/07/23 Python
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
Ajax的工作原理
2015/12/04 面试题
电气技术员岗位职责
2013/11/19 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
借款担保书范文
2014/05/13 职场文书
课外活动实习计划
2015/01/19 职场文书
市场总监岗位职责
2015/02/11 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书