zoukankan      html  css  js  c++  java
  • (转) ThinkPHP模板自定义标签使用方法

    这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下
     转之--http://www.jb51.net/article/51584.htm
     

    使用模板标签可以让网站前台开发更加快速和简单,使用过dedecms、phpcms等内容管理系统的人应该都知道,cms的前台都是使用模板标签来调用数据。以调用文章列表为例:

    dedecms可以写成:

    1
    2
    3
    4
    5
    <ul>
    {dede:arclist row='10' orderby='id desc' titlelen=''}
         <li>[field:title]</li>
    {/dede:arclist}
    </ul>

    phpcms可以写成:

    1
    2
    3
    4
    5
    6
    7
    <ul>
    {pc:content action="hits" catid="6" num="10" order="views DESC"}
       {loop $data $r}
        <li>{$r[title]}</li>
       {/loop}
    {/pc}
    </ul>

    ThinkPHP的自定义标签同样能够实现这样强大的功能。ThinkPHP自定义标签通过TAG扩展库来实现。而ThinkPHP本身就自带了一个tag扩展库只要我们继承TagLib就能随心所遇的定义属于自己的标签。

    命名规范:

    TagLib+标签库名称.class.php

    下面以实现调用导航为例加以说明

    文件TagLibNav.class.php如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    class TagLibNav extends TagLib {
      //attr 属性列表
      //close 是否闭合(0 或者1 默认1)
      //alias 标签别名
      //level 嵌套层次
      // 标签定义如下:
      protected $tags = array(
        'nav' => array('attr' => 'limit,order', 'level' => 3,'close'=>1),
      );
      //定义查询数据库标签
      //attr是属性列表,$content是存储标签之间的内容的
      public function _nav($attr, $content) {
        $tag=$this->parseXmlAttr($attr,$content);
        $cate=M('Channel');
        $tb=$cate->order($tag['order'])->limit($tag['limit'])->select();
        $str='';
        for($i=0;$i<count($tb);$i++)
        {
         $c=str_replace(array("[filed:id]","[filed:name]"),array($tb[$i]['id'],$tb[$i]['name']),$content);
         $str.=$c;
        }
        return $str;
      }
    }
    ?>

    html页面调用方式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <tagLib name="nav" />     //必须在头部进行引用否则会出错
    <html>
    <head>
     <title>tablist</title>
    </head>
    <body>
      <div class="nav">
       <ul>
        <li>首页</li>
        <nav:nav limit='4' order='id asc'>
         <li><a href="[filed:id]">[filed:name]</a></li>
        </nav:nav>
       </ul>
     </div>
     </body>
    </html>

    配置文件:

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

    控制器:

    1
    2
    3
    4
    5
    6
    7
    <?php
    class IndexAction extends Action{
      public function index() {
        $this->display();
      }
    }
    ?>

    至此实现了自定义标签,在控

  • 相关阅读:
    python 面向对象编程
    用python写个快排
    函数(参数,作用域,返回函数,匿名函数,偏函数)
    SpringBoot学习4:springboot整合listener
    SpringBoot学习1:创建第一个SpringBoot项目
    SpringBoot学习2:springboot整合servlet
    SpringBoot学习3:springboot整合filter
    使用FreeMarker导出word文档(支持导出图片)
    MySQL中实现递归查询
    MySQL中find_in_set()函数的使用
  • 原文地址:https://www.cnblogs.com/wanshutao/p/4604310.html
Copyright © 2011-2022 走看看