• Thinkphp自定义标签


    1.定义TagLib目录和文件  TagLibSmarTop.class.php

    2.配置文件

    <?php
        return array(
            'APP_AUTOLOAD_PATH'=>'@.TagLib',  //TagLib的位置  @.表示当前文件夹下
            'TAGLIB_BUILD_IN'=>'Cx,SmarTop'       //Cx是thinkphp基础类库的名称必须引用否则volist等标签就无法使用,SmarTop是自己定义的标签名称
        );
    ?>

    3.定义标签

     1     class TagLibSmarTop extends TagLib{
     2         protected $tags = array(
     3             //nav定义字段  attr 定义属性  close 是否是闭合
     4             'nav' => array('attr'=>'limit,order','close'=>1),
     5             'child' =>array('attr'=>'limit,order,typeid','close'=>1),
     6             'navnav' =>array('attr'=>'limit,order,typeid','close'=>1),
     7         );
     8         /**
     9         *定义标签
    10         *@param $attr array 接受的属性
    11         *@param $content string 接受的字符串
    12         *@return $str 返回字符串
    13         */
    14         public function _nav($attr,$content){
    15             $tag = $this->parseXmlAttr($attr,$content);
    16             $Cate = D('cate');
    17             $result =$Cate->sortChildCate($Cate->order($tag['order'])->limit($tag['limit'])->select());
    18             $str = '';
    19             foreach($result as $k=>$v){
    20                 //使用str_replace()函数进行对字符串的替换
    21                 $str .=str_replace(array('[field:id]','[field:typename]'),array($result[$k]['id'],$result[$k]['name']),$content);
    22             }
    23             return $str;
    24         }
    25         /**
    26         *定义标签 功能待开发只限于2级栏目调用
    27         *@param $attr array 接受的属性
    28         *@param $content string 接受的字符串
    29         *@return $str 返回字符串
    30         */
    31         public function _child($attr,$content){
    32             $tag = $this->parseXmlAttr($attr,$content);
    33             $Cate = D('cate');
    34             $where = array('pid'=>empty($tag['typeid'])?0:$tag['typeid']);
    35             $result =$Cate->where($where)->order($tag['order'])->limit($tag['limit'])->select();
    36             $str = '';
    37             foreach($result as $k=>$v){
    38                 //使用str_replace()函数进行对字符串的替换
    39                 $str .=str_replace(array('[field:id]','[field:name]'),array($v['id'],$v['name']),$content);
    40             }
    41             return $str;
    42         }
    43         public function _navnav($attr,$content){
    44             $tag= $this->parseXmlAttr($attr,$content);
    45             //使用php代码以字符串的形式返回到模板里面 要以单引号括起来
    46             $str ='<?php ';
    47             $str .= '$Cate = M("cate");';
    48             $str .= '$_result = cateModel::sortChildCate($Cate->select());';
    49             $str .='foreach($_result as $__CateNav):';
    50             $str .='extract($__CateNav);?>';  //将数组的$.__CateNav[]去掉
    51             $str .= $content;
    52             $str .= '<?php endforeach?>';
    53             return $str;
    54         }
    55     }

    4.模板使用标签

     1       <navnav limit ='20'  order='id ASC'>
     2                 <li class='nav-lv1-li'>
     3                     <a href="" class='top-cate'>{$name}</a>
     4                     <ul>
     5                         <foreach item='value' name="child">
     6                             <li><a href="">{$value.name}</a></li>
     7                         </foreach>
     8                     </ul>
     9                 </li>
    10             </navnav>
     1             <nav limit ='20'  order='id ASC'>
     2                 <li class='nav-lv1-li'>
     3                     <a href="" class='top-cate'>[field:typename]</a>
     4                     <ul>
     5                         <child  limit ='20'  order='id ASC' typeid="[field:id]">
     6                             <li><a href="">[field:name]</a></li>
     7                         </child>
     8                     </ul>
     9                 </li>
    10             </nav>
  • 相关阅读:
    【SQL】含有NULL值的排序
    【SQL】结构化查询语言
    【Oracle】体系结构
    【PL/SQL】匿名块、存储过程、函数、触发器
    【Linux】VMware安装VMware Tools工具
    【SQL】INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND
    Tornado源码浅析
    【Python之路】特别篇--property()函数 和 @property 装饰符
    【Python之路】特别篇--生成器(constructor)、迭代器(iterator)、可迭代对象(iterable)
    【Python之路】特别篇--基于领域驱动模型架构设计的京东用户管理后台
  • 原文地址:https://www.cnblogs.com/subtract/p/4293508.html
Copyright © 2020-2023  润新知