1.准备工作

thinkphp目前主流开发版本时 3.2.2,全面进入面向对象的时代了,但可能是个人水平的缘故,tp3.2.2+中的命名空间没怎么看懂过,所以用起来很吃力,也直接影响了自定义标签的扩展能力。

先来看看系统自带的标签库,Cx.class.php是系统的内置标签库,Html.class.php可以认为是自定义标签库

1.1为什么说Cx.class.php是自定义标签库呢?

在tp默认的配置文件中有这样一个配置,当然也可以Html.class.php设置为内置标签库

1.2自定义标签库和内置标签库的使用有什么区别么?

这里需要说一下,由于水平原因,没弄懂命名空间,所以自定义标签库也只能放在 路径ThinkPHP\Library\Think\Template\TagLib下了

其实说到这里,相信很多人已经回了,Html.class.php就在眼前,为什么不模仿一下呢,呵呵,没错,模仿吧

2.这里我定义了一个 Sql.class.php目录,如下放置

内容是(哎,万恶的命名空间啊~~)

namespace Think\Template\TagLib;

use Think\Template\TagLib;

class Sql extends TagLib

{

protected $tags = array(

'list' => array('attr' => 'limit,order','close' =>1)// attr 属性列表close 是否闭合(0 或者1 默认为1,表示闭合)

);

public function _list($attr,$content)  //标签名 单划线开头

{

$limit=$attr['limit'];//参数$limit,可通过模板传入参数值

$order=$attr['order'];//$order$limit,可通过模板传入参数值

$str='<?php  ';

$str .= '$field=array("id","title","hits");';//定义需要调用的字段

$str .= '$_list_news=M("News")->field($field)->limit('.$limit.')->order("'.$order.'")->select();';//查询语句

$str .= 'foreach ($_list_news as $_list_value):';

$str .= 'extract($_list_value);';

$str .= '$url=U("read/".$id);?>';//自定义文章生成路径$url

$str .= $content;

$str .='<?php  endforeach ?>';

return $str;

}

}

?>

3.使用方式

html>

Index|Home

{$key}|{$vo.id}:{$vo.name}

  • {$title}

~~~~~~~~~~~~~~~~~~成功的喜悦,悲伤的过程~~~~~~~~~~~~~~~~~~~~~~~~~~~

4.我们再来看看标签库是如何被解析的

呵呵,命名空间,也就是说这里基本上只往这个目录下放了。当然,这不是坏事,因为作为库存在的一般是依赖心比较低的,所以来说也推荐这么做,

这样可以为自己积累一些优秀的标签库,毕竟源码可以修改,如果你不敢修改,那你只能使用mvc传统方法查数据了。

5.为什么要使用自定义标签呢?

自定义标签解决的是重复性问题和全局性问题,通过自定义标签可以减少重复性工作,全局性问题是,代码重用度高,另外代码可读性高,通过简单的参数设定,就可以完成某些查询,从而也减少了控制器的代码,最后一点,自定义标签的可维护性也很好。

try doing it.

thinkphp使用php标签,ThinkPHP框架定义自己的标签库相关推荐

  1. html常用标签有什么区别,HTML常用标签

    1.HTML常用标签 首先 HTML和CSS是两种完全不同的语言,我们学的是结构,就只写HTML标签,认识标签就可以了. 不会再给结构标签指定样式了. HTML标签有很多,这里我们学习最为常用的,后面 ...

  2. 【ThinkPHP系列篇】ThinkPHP框架的介绍和搭建(一)

    各位博友好,最近博主学了关于ThinkPHP的一些基本操作,感觉很有收获,所以作为小白的我想与大家分享一些关于ThinkPHP的搭建及基本操作,感觉更适合初学者来学习,当然也希望大牛们能够给小白我提出 ...

  3. ThinkPHP讲解(一)框架基础

    ThinkPHP框架知识点过于杂乱,接下来将以问题的形势讲解tp(ThinkPHP的简写) 1.tp框架是什么,为什么使用是它? 一堆代码的集合,里边有变量.函数.类.常量,里边也有许多设计模式MVC ...

  4. Laravel和Thinkphp有什么区别,哪个框架好用

    Laravel和Thinkphp这两个php框架对于php程序员都不陌生,新手可能对Thinkphp比较熟,也是国内比较出名的开源框架,更高级的Laravel一般有点经验的才使用. TP框架: Thi ...

  5. ThinkPHP 集成 PHPUnit 8 测试框架进行单元测试

    ThinkPHP 5.1 集成 PHPUnit 8 测试框架 本项目仅适用于运行 PHP7.2 以上的环境!对于低版本 PHP 请根据需要调整 PHPUnit 的版本! 声明 由于原项目 think- ...

  6. Web前端基础---认识HTML及其组成---标签、框架

    HTML HTML:Hypertext Markup Language 超文本标记语言 超文本:能够记录文字.标点符号,输入文本.图片.视频.音频和超链接等内容 标记(标签):将所有内容封装成标签,需 ...

  7. Struts2框架中s:if标签和s:set标签小结

    版权:JavaIT学习室 转载请标明,http://www.javait.org 最近发表了几篇文章都是对在使用Struts2框架中的标签进行一些知识点的归纳.今天这篇文章是对s:if标签和s:set ...

  8. html 表格,列表,表单,select和下拉选框,textarea多行文本域,label关联控件,表单,浮动框架,结构化标签

    1. 表格 表格的语法 (1) table标签: 表示表格的开始和结束.表格的所有内容都需要写在这一对标签里 (2) tr标签: 表示表格中的一行 table row (3) td标签:要写在tr中, ...

  9. 框架:mybatis常用标签(refid、foreach、trim)

    1.mybatis中refid是什么意思 1.首先定义一个sql标签,一定要定义唯一id <sql id="Base_Column_List" >name,age< ...

最新文章

  1. bzoj1562[NOI2009]变换序列——2016——3——12
  2. Android activity之间的滑入切换
  3. 内存泄露检测工具之DMalloc
  4. Battery historian安装及使用
  5. 12.当效率至关重要时,请在map::operator[]与map::insert之间谨慎作出选择
  6. ax200无线网卡黑苹果_无线网卡AX200刷killer1650X
  7. socket通信需要网线连接吗_socket方式实现网络通信
  8. 开源考试系统 -微信小程序开发
  9. 读书笔记《计算机是怎样跑起来的》
  10. android音频系统简介
  11. vscode安装uweb_桌面应用|在Ubuntu中安装Visual Studio Code
  12. 自己动手,解决微信投票提示“投票失败”问题
  13. 计算机密码技术发展,密码技术的分类
  14. oppo r11 r11t解BL锁安装面具magisk详细教程
  15. spoon java_如何以及为什么使用Spoon分析,生成和转换Java代码
  16. 公开的中文语料库有哪些?
  17. 27岁活的像个废物一样,没技术没学历,现在学习软件测试还来得及吗?
  18. 你的网卡真有千兆么?——千兆网卡传输速度解析
  19. 破10亿用户的支付宝给支付生态的启示
  20. Android 线刷入Recovery.img

热门文章

  1. ctfshow终极考核web655-web665
  2. 关于MEMS的技术简介
  3. 洛谷P1135 搜索
  4. C语言经典项目——超市管理系统
  5. CDH 查询 Hive执行过的SQL语句
  6. [无限互联]地图框架MapView(采用MKMapView)
  7. MTK平台LCM驱动移植
  8. [附源码]Python计算机毕业设计Django甜品购物网站
  9. [JAVA]爬取百度关于关键字的诗句
  10. 为什么我们的自动化测试做不起来?