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 相关文章推荐
mysql中存储过程、函数的一些问题
Feb 14 PHP
PHP 工厂模式使用方法
May 18 PHP
php实现mysql封装类示例
May 07 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
Oct 25 PHP
PHP中ajax无刷新上传图片与图片下载功能
Feb 21 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
CodeIgniter框架数据库基本操作示例
May 24 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引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
python的debug实用工具 pdb详解
2019/07/12 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
Python上下文管理器全实例详解
2019/11/12 Python
django自定义模板标签过程解析
2019/12/14 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
在keras中实现查看其训练loss值
2020/06/16 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
我的教育故事演讲稿
2014/05/04 职场文书
工作失职检讨书
2015/01/26 职场文书
2015年监理个人工作总结
2015/05/23 职场文书