(转) 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();

  }

}

?>

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

时间: 2024-12-20 00:13:04

(转) ThinkPHP模板自定义标签使用方法的相关文章

JSP2的自定义标签和方法

Jsp2的自定义标签 Jsp2 开发标签库的几个步骤: 开发自定义标签处理类. 建立一个*.tld文件,每个tld文件对应一个标签库,每个标签库可对应多个标签. 在jsp文件中使用自定义标签 空标签 开发自定义标签类 自定义标签类应该继承一个父类javax.servlet.jsp.tagext.SimpleTagSupport: 如果标签类包含属性,每个属性都有对应的getter    和settter方法: 重写doTag()方法,这个方法负责生成页面内容 建立一个简单的自定义标签,在页面上输

ThinkPHP 模板 Volist 标签嵌套循环输出多维数组

ThinkPHP 中对 volist 标签嵌套使用可实现多维数组的输出. volist 嵌套使用 一般的二维数组,可以用 volist 标签直接循环输出.对于多维数组,则需要对其中的数组成员再次使用 volist 标签嵌套循环输出. 构建一个多维数组: $food = array(); $food[0]['fruits'][0]['fruits1'] = '苹果1'; $food[0]['fruits'][0]['fruits2'] = '桔子1'; $food[0]['fruits'][0][

Jsp自定义标签和方法

首先是要有一个标签处理类,标签处理类可以直接实现Tag接口,也可以继承JAVA中已经实现了的TagSupport这个类,TagSupport也是继承自Tag接口的,它内部已经对Tag接口进行了实现,一般是继承TagSupport类,之后是重写父类的doStartTag和doEndTag方法, 对于开始标签来说返回值主要有EVAL_BODY_INCLUDE和SKIP_BODY,前者表示执行标签体,后者表示略过标签体: 对于结束标签的返回值主要有两种EVAL_PAGE和SKIP_PAGE,前者表示继

thinkphp模板中标签&lt;volist&gt;,&lt;if&gt;和 U函数的使用

这三个,容易出错. <volist name="list" id="vo" empty="暂时没有数据" key="k">      <tr>          <td>{$k}</td>          <td>{$vo.domain}</td>          <td>{$vo.contact}</td>         

(转)浅谈dedecms模板引擎工作原理及自定义标签

理解织梦模板引擎有什么意义?一方面可以更好地自定义标签.更多在于了解织梦系统,理解模板引擎是理解织梦工作原理的第一步.理解织梦会使我们写php代码时更顺手,同时能学习一些php代码的组织方式. 这似乎不是那么简单,如果你只想学习自定义标签,可以看一下“是否需要自定义标签”和““扩展标签””就够了. 一解析式引擎 如果你还没用过dedecms的标签,先用一下,也可以看一下“dedecms网页模板编写”.熟悉一下memberlist这个标签,下面会以这个标签为例. 织梦提供的模板分析引擎有解析式和编

thinkphp模板常用的方法

thinkphp模板我是看了3.2的文档,对里面的东西过了一遍,然后在写到需要用到模板的东西的时候就有印象,有的能直接回顾,但是有的就可能只知道有这个东西,但是不知道怎么用,所以就重新查手册,这个的话我感觉是挺好的,毕竟不可能所有东西总是能记在大脑里,有时候忘记了拿出来回顾回顾是比较好的,也容易让自己再次记忆,也会记得更牢固. 下面说一下我在这个项目中经常用到的几个方法(有句话说得好,学20%的东西就能完成80%的事情,做项目的时候最能感受这句话的精髓) U方法: U方法是用来生成URL地址的

Django(七)—— 模板层:变量、过滤器、标签、自定义标签和过滤器

模板层:变量.过滤器.标签.自定义标签和过滤器 将页面的设计和Python的代码分离开会更干净简洁更容易维护. 我们可以使用 Django的 模板系统 (Template System)来实现这种模式 # django模板修改的视图函数 def current_time(req): from django.template import Template,Context now=datetime.datetime.now() t=Template('<html><body>现在时刻

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 TagLibS

discuz 模板中如何使用方法和语言标签?

第一个问题:如何调用方法? 关于模板中eval的使用{eval php 语句}比如:<!--{eval echo "Hello World!"}--> 工作中遇到一个小问题,discuz的手机模板中,需要切换收藏和取消收藏. 取消收藏,需要找到forum/viewthread.htm .forum/viewthread_node.htm 模板,在viewthread_node模板中修改取消收藏的 最低层代码 /source/include/spacecp/spacecp_f