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读写文件的方法(生成HTML)
Nov 27 PHP
一个用php实现的获取URL信息的类
Jan 02 PHP
理解和运用PHP中的多态性[译]
Aug 02 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
php Session存储到Redis的方法
Nov 04 PHP
php统计文章排行示例
Mar 04 PHP
删除html标签得到纯文本可处理嵌套的标签
Apr 28 PHP
php绘制圆形的方法
Jan 24 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 PHP
php数据库操作model类(使用__call方法)
Nov 16 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 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
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
php简单日历函数
2015/10/28 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
jquery foreach使用示例
2013/09/12 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
Vue表单实例代码
2016/09/05 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
详解React 条件渲染
2020/07/08 Javascript
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
经济学人订阅:The Economist
2018/07/19 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
为什么需要版本控制?
2013/08/08 面试题
秘书专业自荐信范文
2013/12/26 职场文书
高中美术教学反思
2014/01/19 职场文书
电子商务专业求职信
2014/03/08 职场文书
工作会议主持词
2014/03/17 职场文书
创先争优承诺书范文
2014/03/31 职场文书
公务员诚信承诺书
2014/05/26 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis