加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 02:07:12 所属栏目:PHP教程 来源:网络整理
导读:《PHP实例:ThinkPHP分组下自定义标签库实例》要点: 本文介绍了PHP实例:ThinkPHP分组下自定义标签库实例,希望对您有用。如果有疑问,可以联系我们。 本篇章节讲解ThinkPHP分组下自定义标签库的实现办法.供大家参考研究.具体如下: PHP教程 自定义

《PHP实例:ThinkPHP分组下自定义标签库实例》要点:
本文介绍了PHP实例:ThinkPHP分组下自定义标签库实例,希望对您有用。如果有疑问,可以联系我们。

本篇章节讲解ThinkPHP分组下自定义标签库的实现办法.分享给大家供大家参考.具体如下:PHP教程

自定义标签库应该位于ThinkPHPExtendDriverTagLib目录下PHP教程

1 新建标签类库文件名为TagLibBlog.class.php.PHP教程

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

代码如下:
import('TagLib');
class TagLibBlog extends TagLib {
}

3 在类中声明一个protected成员变量$tags
代码如下:
class TagLibBlog extends TagLib {
?? protected $tags =array(
?????? 'mynav'=>array('attr'=>'limit,order','close'=>1)
?????? /* www.aspzz.cn
?????? 这里$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,'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,$content);
?????? }
??????
?????? return $str;
?? }
??
}
?>

模板中测试:
代码如下:
<mynav limit="0,10" order="sort asc">
?? <a href="[field.id]">[field.name]</a><br/>
</mynav>

希望本文所述对大家的ThinkPHP框架程序设计有所赞助.PHP教程

欢迎参与《PHP实例:ThinkPHP分组下自定义标签库实例》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读