ThinkPHP分组下自定义标签库实例


Posted in PHP onNovember 01, 2014

本文实例讲述了ThinkPHP分组下自定义标签库的实现方法。分享给大家供大家参考。具体如下:

自定义标签库应该位于ThinkPHP\\Extend\\Driver\\TagLib目录下

1 新建标签类库文件名为TagLibBlog.class.php。

2 编辑刚才新建的类库文件,新建一个类,继承TagLib父类

import('TagLib');

class TagLibBlog extends TagLib {

}

3 在类中声明一个protected成员变量$tags
class TagLibBlog extends TagLib {

   protected $tags =array(

       'mynav'=>array('attr'=>'limit,order','close'=>1)

       /* 3water.com

       这里$tags数组内,每个单元也就是每一行代表一个标签,例如{dede:article},我们这里也定义了一个mynav,

       然后每一行标签的键名就是标签名,键值是一个数组,该数组包含两个单元,第一个就是attr,就是标签中得属性,以逗号分隔,

       如num,typeid等等,close的值如果是0的话就是非闭合标签,1的话就是闭合,意思是要以</mynav>来结尾

       */

   );

}

4 定义了标签后,我们需要实现标签的功能,这里直接在类文件下声明一个函数,以_开头,以标签名 mynav结尾的函数名
public function _mynav($attr,$content){

   $attr=$this->parseXmlAttr($attr);

   

   import('@.Class.Tool');

   $categories=M('category')->limit($attr['limit'])->order($attr['order'])->select();

   $categories=Tool::formatMultiArray($categories);

   

   $str='';

   for($i=0;$i<count($categories);$i++){

       $model=array(

           '/[field.id]/',

           '/[field.name]/'

       );

       $replace=array(

           $categories[$i]['id'],

           $categories[$i]['name']

       );

       $str.=preg_replace($model,$replace,$content);

   }

   

   return $str;

}

定义好标签后,需要在项目公用配置文件中加载标签库
config.php
//加载标签库

'APP_AUTOLOAD_PATH'=>'@.TagLib',

'TAGLIB_BUILD_IN'=>'Cx,Blog',

标签库完整源码如下:

<?php

import('TagLib');

class TagLibBlog extends TagLib {

   

   protected $tags=array(

       'mynav'=>array('attr'=>'limit,order','close'=>1)

   );

   

   public function _mynav($attr,$content){

       $attr=$this->parseXmlAttr($attr);

       

       import('@.Class.Tool');

       $categories=M('category')->limit($attr['limit'])->order($attr['order'])->select();

       $categories=Tool::formatMultiArray($categories);

       

       $str='';

       for($i=0;$i<count($categories);$i++){

           $model=array(

               '/[field.id]/',

               '/[field.name]/'

           );

           $replace=array(

               $categories[$i]['id'],

               $categories[$i]['name']

           );

           $str.=preg_replace($model,$replace,$content);

       }

       

       return $str;

   }

   

}

?>

模板中测试:
<mynav limit="0,10" order="sort asc">

   <a href="[field.id]">[field.name]</a><br/>

</mynav>

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

PHP 相关文章推荐
用PHP制作静态网站的模板框架(一)
Oct 09 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
PHP运行模式汇总
Nov 06 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
详解php协程知识点
Sep 21 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 PHP
PHP根据两点间的经纬度计算距离
Oct 31 #PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 #PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 #PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 #PHP
ThinkPHP控制器间实现相互调用的方法
Oct 31 #PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 #PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 #PHP
You might like
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
深入理解PHP内核(一)
2015/11/10 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
PHP运行模式汇总
2016/11/06 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
在Django的上下文中设置变量的方法
2015/07/20 Python
Python正规则表达式学习指南
2016/08/02 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
助残日活动总结
2014/08/27 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
教师个人工作总结范文2014
2014/11/10 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
管理失职检讨书
2015/05/05 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android