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实现Ftp用户的在线管理的代码
Mar 06 PHP
mysql 全文搜索 技巧
Apr 27 PHP
php 什么是PEAR?(第三篇)
Mar 19 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
php json_encode奇怪问题说明
Sep 27 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
php简单实现数组分页的方法
Apr 30 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 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函数
2011/05/31 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
Python global全局变量函数详解
2018/09/18 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
品质主管的岗位职责
2013/12/04 职场文书
建议书怎么写
2014/03/12 职场文书
新闻发布会主持词
2014/03/28 职场文书
项目经理任命书内容
2014/06/06 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android