(转) ThinkPHP模板自定义标签使用方法
使用模板标签可以让网站前台开发更加快速和简单,使用过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(); } } ?> |
至此实现了自定义标签,在控
(转) ThinkPHP模板自定义标签使用方法的更多相关文章
- python 全栈开发,Day70(模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介)
昨日内容回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...
- Django基础(2)--模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介
没整理完 昨日回顾: 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 ...
- Django模板自定义标签和过滤器,模板继承(extend),Django的模型层
上回精彩回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...
- ThinkPHP模板IF标签用法详解
投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-07-01 我要评论 这篇文章主要介绍了ThinkPHP模板IF标签用法,需要的朋友可以参考下 ThinkPHP的IF标 ...
- django模板-自定义标签、过滤器
自定义标签或者过滤器的步骤 ①将要创建自定义标签或过滤器的app加入settings文件的installed_apps中 ②在app中创建templatetags目录,类型为包即packages ③在 ...
- JSP2的自定义标签和方法
Jsp2的自定义标签 Jsp2 开发标签库的几个步骤: 开发自定义标签处理类. 建立一个*.tld文件,每个tld文件对应一个标签库,每个标签库可对应多个标签. 在jsp文件中使用自定义标签 空标签 ...
- ThinkPHP 模板 Volist 标签嵌套循环输出多维数组
ThinkPHP 中对 volist 标签嵌套使用可实现多维数组的输出. volist 嵌套使用 一般的二维数组,可以用 volist 标签直接循环输出.对于多维数组,则需要对其中的数组成员再次使用 ...
- ThinkPHP模板内使用U方法
为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响. 三种携带 ...
- Java之 jstl 自定义标签的方法
1.写一个Java类 我的路径是写再tag包中的一个 HelloTag类 package tag; import java.io.IOException; import javax.servlet.j ...
随机推荐
- 剖析并利用Visual Studio Code在Mac上编译、调试c#程序【转】
0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很 ...
- 【技术贴】7-zip 7z关联右键菜单后右键不弹出菜单的解决办法
解决7z,7zip右键菜单 失效 右键菜单 无法弹出右键菜单 不正常 右键菜单 sb等各种疑难杂症. 1.首先先去7z的选项里面把右键关联给设置了. 用的好好的7z,正吃着火锅唱着歌忽然发现右键单文件 ...
- linux 修改目录文件权限,目录文件所属用户,用户组
1:查看命令:ll drwxr-xr-x 4 gamer ftp 4096 Mar 7 16:56 gstore drwxrwxrwx 10 root ftp 4096 De ...
- ios入门之c语言篇——基本函数——1——随机数生成
1.随机数函数 参数返回值解析: 参数: a:int,数字范围最小值: b:int,数字范围最大值: 返回值: 1:闰年: 0:非闰年: 备注: a-b的绝对值不能超过int的最大值(65535); ...
- Insertion Sort List —— LeetCode
Sort a linked list using insertion sort. 题目大意:将一个单链表使用插入排序的方式排序. 解题思路:先新建一个头指针,然后重新构建一下这个单链表,每次从头找到第 ...
- HDOJ(HDU) 2148 Score(比较、)
Problem Description 转眼又到了一年的年末,Lele又一次迎来了期末考试.虽然说每年都要考试,不过今年的这场考试对Lele来说却意义重大. 因为经济原因,如果今年没有排在班级前几名, ...
- [Locked] Paint House I & II
Paint House There are a row of n houses, each house can be painted with one of the three colors: red ...
- java迭代器demo
package cn.aust.zyw.demo; import java.util.Iterator; /** * Created by zyw on 2016/2/16. * Iterator模式 ...
- Oracle Locks之DML锁
Oracle通过锁来实现数据库的并发控制 Oracle Database automatically locks a resource on behalf of a transaction to pr ...
- IntelliJ IDEA安装 一些配置
idea 配置修改 本篇 参考https://blog.liyang.io/234.html. 1.修改IDEA菜单的字体大小: 单击File | Project Structure菜单项,打开Pro ...