文档章节

ThinkPHP框架定义自己的标签库

IamOkay
 IamOkay
发布于 2014/11/18 22:12
字数 974
阅读 592
收藏 0

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自定义标签库和内置标签库的使用有什么区别么?

自定义标签使用需要带前缀,当然通过某种方式也可以不带前缀,具体参阅http://document.thinkphp.cn/manual_3_2.html#taglib 

<html:editor id="editor" name="remark" type="KINDEDITOR"  ></html:editor>

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


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

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

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

<?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.使用方式

<!doctype html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>Index|Home</title>
		<meta http-equiv="X-UA-Compatible" content="IE=7,chrome=1.0" />
		<script type="text/javascript" src="__PUBLIC__/Js/jquery.min.js"></script>
	</head>
	<body>
	        <!--导入标签库,多个用都好隔开-->
	        <!--注意,taglib标签在模板一个页面中只能出现一次,第二次出现无效,不信你可以试试哦-->
	        
		<taglib name="html,sql" />

		<foreach name="list" item="vo" >
    		{$key}|{$vo.id}:{$vo.name}<br/>
		</foreach>

		<html:editor id="editor" name="remark" type="KINDEDITOR"  ></html:editor>

		<ul>
			<sql:list limit="9" order="id desc">
	     		<li> <a title="{$title}" href="{$url}">{$title}</a></li>
	 		</sql:list>
 		</ul>
	</body>
</html>

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

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

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

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


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

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


try doing it.

© 著作权归作者所有

共有 人打赏支持
IamOkay
粉丝 190
博文 461
码字总数 373670
作品 0
海淀
程序员
私信 提问
thinkphp开发的框架的简单介绍

  说起来现在的互联网时代中用到thinkphp的地方也是很多的,这也是一项技术活,开发框架也是比较有难度的,下面就给大家简单地介绍一下。   ThinkPHP是一个免费开源的,快速、简单的面向...

孙智绘
2012/06/28
40
0
适合PHP新手入门上手的开发框架-thinkphp

ThinkPHP是一个开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。早期的思想...

big_cat
2013/06/15
0
0
ThinkPHP的网友评论

ThinkPHP 是一个快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发 布,并且永久免费使用,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。借鉴了国外很多优秀的框架和...

红薯
2009/12/11
1K
7
新手指导Thinkphp开发指南

小编于昨日参加朋友婚礼,浑身喜气洋洋。今天给用户带来的是关于thinkphp开发指南的纯技术性的文档,本文档目的很简单: 1、 帮助开发人员掌握thinkphp入门 2、 快速利用thinkphp进行项目开发...

汤圆
2012/12/25
0
1
php开发笔记-windows-linux-thinkphp开发环境搭建

文章来自我的博客:https://www.lwxshow.com/dev/php/thinkphp-configuration-environment.html 使用最新版本的3.1.3版本 php开发笔记-windows-thinkphp开发环境搭建 1.下载ThinkPHP框架 http...

卢卫湘
2013/06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
26分钟前
2
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
52分钟前
4
0
分布式Session共享解决方案

分布式Session一致性? 说白了就是服务器集群Session共享的问题 Session的作用? Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。 客户端在第一次访...

Java干货分享
58分钟前
8
0
开源软件和开源模式面临的生存危机

导读 开源模式可能正面临一场危机。越来越多的开源软件和平台被大型云计算服务商融入自家的云服务体系,并以此获利颇丰,但并不支付费用,也没有对开源社区做出相应的回馈。而实际上,大部分...

问题终结者
今天
4
0
让看不见的AI算法,助你拿下看得见的广阔市场

人工智能技术的飞速发展给各行各业都带来了深远的影响,AI已被视为企业提升运营效能、应对市场竞争的必经之路。然而对于一些企业而言,让AI真正实现落地和应用,并且创造价值,仍是一件需要努...

个推
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部