• ThinkPHP自定义标签


    自定义标签的之前,先看看Think PHP自己是如何自定义标签的:

    具体位置:ThinkPHP / Library / Think / Template / TagLib / Cx.class.php

    可以看一个 foreach 标签是如何写的:

    <?php
    namespace ThinkTemplateTagLib;
    use ThinkTemplateTagLib;
    /**
     * CX标签库解析类
     */
    class Cx extends TagLib {
        // 标签定义
        protected $tags   =  array(
            // 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次        
            'foreach'   =>  array('attr'=>'name,item,key','level'=>3)
        );
        /**
         * foreach标签解析 循环输出数据集
         */
        public function _foreach($tag,$content) {
            $name       =   $tag['name'];
            $item       =   $tag['item'];
            $key        =   !empty($tag['key'])?$tag['key']:'key';
            $name       =   $this->autoBuildVar($name);
            $parseStr   =   '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>';
            $parseStr  .=   $this->tpl->parse($content);
            $parseStr  .=   '<?php endforeach; endif; ?>';
    
            if(!empty($parseStr)) {
                return $parseStr;
            }
            return ;
        }
    }

    下面说下自定义标签:

    第一步:修改:修改Application/Common/conf/config.php

    增加如下一条配置;
    'TAGLIB_BUILD_IN' => 'Cx,CommonTagMy', //加载自定义标签

    <?php
    return array (
      'TAGLIB_BUILD_IN' => 'Cx,Common\Tag\My',
    );
    ?>

    cx是内置的标签库,CommonTagMy是自定义的标签库位置;

    示例是在Application/Common/Tag目录下建的My.class.php

    第二步:

    新建My.class.php文件

    命名空间要和配置项中填写的一致;如下图;

    <?php
    namespace CommonTag;
    use ThinkTemplateTagLib;
    class My extends TagLib{
        
    };

    标签分为两种:

    闭合标签就是单标签;比如a标签、img标签等等;

    非闭合标签就是对标签;比如div、p标签等等;

    我写的标签:

    <?php
    namespace CommonTag;
    use ThinkTemplateTagLib;
    class My extends TagLib{
        // 定义标签
        protected $tags = array(
            'topcates'=> array('attr'=>'limit')
        );
        public function _topcates($attr,$content){
            //调用父类
            $limit = isset($attr['limit']) ? $attr['limit'] : '';
            // 组合PHP代码的字符串
            $str = '<?php ';
            $str .= '$where = array("pid" =>0);';
            $str .= '$_topcatesResult = M("category")->where($where)->limit('.$limit.')->select();';
            $str .= 'foreach($_topcatesResult as $v):';
            $str .= 'extract($v);?>';
            $str .= $content;
            $str .= '<?php endforeach;?>';
            return $str;
        }
    };

    标签调用:

    <topcates limit='3'>
    <li><a href="{:U('List/index',array('id'=>$id))}">{$name}</a></li>
    </topcates>
  • 相关阅读:
    postgresql-磁盘空间不足问题排查
    postgresql-删除重复数据
    postgresql-排序
    磁盘耗时时间
    nginx 报错 The plain HTTP request was sent to HTTPS port
    nodejs使用pkg打包
    npm 设置镜像源
    IDEA通过Ctrl+鼠标滚轮放大/缩小字体
    使 nodejs 代码 在后端运行(nohup)
    加密HSQLDB的.script文件
  • 原文地址:https://www.cnblogs.com/e0yu/p/7351866.html
Copyright © 2020-2023  润新知