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 相关文章推荐
example1.php
Oct 09 PHP
php模块memcache和memcached区别分析
Jun 14 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
php构造函数实例讲解
Nov 13 PHP
php统计文章排行示例
Mar 04 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
Thinkphp单字母函数使用指南
May 08 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
PHP基于GD库实现的生成图片缩略图函数示例
Jul 05 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 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
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
smtp邮件发送一例
2006/10/09 PHP
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
discuz目录文件资料汇总
2014/12/30 PHP
php检查页面是否被百度收录
2015/10/28 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
js 调整select 位置的函数
2008/02/21 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
angularjs基础教程
2014/12/25 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
python统计中文字符数量的两种方法
2019/01/31 Python
Python中dict和set的用法讲解
2019/03/28 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
面试后的感谢信范文
2014/02/01 职场文书
八一建军节活动方案
2014/02/10 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
励志演讲稿200字
2014/08/21 职场文书
安全教育主题班会总结
2015/08/14 职场文书
关于教师节的广播稿
2015/08/19 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
七年级数学教学反思
2016/02/17 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python