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 array操作10个小技巧分享
Jun 23 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
PHPAnalysis中文分词类详解
Jun 13 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
php实现遍历多维数组的方法
Nov 25 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
php语法检查的方法总结
Jan 21 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 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
用户的详细注册和判断
2006/10/09 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
跟老齐学Python之集合的关系
2014/09/24 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
详解Python self 参数
2019/08/30 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
广告学专业推荐信范文
2013/11/23 职场文书
高中生期末评语大全
2014/01/28 职场文书
销售2014年度工作总结
2014/12/08 职场文书
青年文明号申报材料
2014/12/23 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
python本地文件服务器实例教程
2021/05/02 Python
Redis可视化客户端小结
2021/06/10 Redis
python中24小时制转换为12小时制的方法
2021/06/18 Python