Taglib自定义万能标签扩展 DownLoad
http://www.thinkphp.cn/extend/538.html
用ThinkPHP的标签做网站觉得不够快速,就自己写了一个扩展,感觉挺好的,分享出来,给有需要的TPER。
<?php
class TagLibEP extends TagLib{
protected $tags = array('select'=>array('attr'=>'table,where,order,limit,id,page,sql,field,key,mod,debug','level'=>3));
public function _select($attr,$content){
$tag = $this->parseXmlAttr($attr,'select');
$table =!empty($tag['table'])?$tag['table']:'';
$order =!empty($tag['order'])?$tag['order']:'';
$limit =!empty($tag['limit'])?intval($tag['limit']):'';
$id =!empty($tag['id'])?$tag['id']:'r';
$where =!empty($tag['where'])?$tag['where']:' 1 ';
$key =!empty($tag['key'])?$tag['key']:'i';
$mod =!empty($tag['mod'])?$tag['mod']:'2';
$page =!empty($tag['page'])?$tag['page']:false;
$sql =!empty($tag['sql'])?$tag['sql']:'';
$field =!empty($tag['field'])?$tag['field']:'';
$debug =!empty($tag['debug'])?$tag['debug']:false;
$this->comparison['noteq']= '<>';
$this->comparison['sqleq']= '=';
$where =$this->parseCondition($where);
$sql =$this->parseCondition($sql);
$parsestr.='<?php $m=M("'.$table.'");'; if($sql){
if($page){
$limit=$limit?$limit:10;//如果有page,没有输入limit则默认为10
$parsestr.='import("@.ORG.Page");';
$parsestr.='$count=count($m->query("'.$sql.'"));';
$parsestr.='$p = new Page ( $count, '.$limit.' );';
$parsestr.='$sql.="'.$sql.'";'; $parsestr.='$sql.=" limit ".$p->firstRow.",".$p->listRows."";';
$parsestr.='$ret=$m->query($sql);';
$parsestr.='$pages=$p->show();';
//$parsestr.='dump($count);dump($sql);';
}else{
$sql.=$limit?(' limit '.$limit):'';
$parsestr.='$ret=$m->query("'.$sql.'");';
}
}else{
if($page){
$limit=$limit?$limit:10;//如果有page,没有输入limit则默认为10
$parsestr.='import("@.ORG.Page");';
$parsestr.='$count=$m->where("'.$where.'")->count();';
$parsestr.='$p = new Page ( $count, '.$limit.' );';
$parsestr.='$ret=$m->field("'.$field.'")->where("'.$where.'")->limit($p->firstRow.",".$p->listRows)->order("'.$order.'")->select();';
$parsestr.='$pages=$p->show();';
}else{
$parsestr.='$ret=$m->field("'.$field.'")->where("'.$where.'")->order("'.$order.'")->limit("'.$limit.'")->select();';
}
}
if($debug!=false){
$parsestr.='dump($ret);dump($m->getLastSql());';
}
$parsestr.= 'if ($ret): $'.$key.'=0;';
$parsestr.= 'foreach($ret as $key=>$'.$id.'):';
$parsestr.= '++$'.$key.';$mod = ($'.$key.' % '.$mod.' );?>';
$parsestr.= $this->tpl->parse($content);
$parsestr.= '<?php endforeach;endif;?>';
return $parsestr; }
}
?>
DEMO:
文件放在ThinkPHP\Extend\Driver\TagLib\下,然后在config.php文件中引入,'TAGLIB_PRE_LOAD' => 'EP',
table:表名,where查询条件,order排序,id结果变量,page分页开启,field字段,key循环变量,mod取模,debug是否调试
- <EP:select sql="select * from table order by id desc" limit="10" page="1"></EP:select>
- <EP:select table="article" limit="10"></EP:select>
无论是频道页面还是列表页面都可以实现分页了。
- <div id="pages">{$pages}</div>
Taglib自定义万能标签扩展 DownLoad的更多相关文章
- dubbo-config-spring自定义xml标签扩展
要实现自定义自定义标签扩展,需要有如下步骤(在spring中定义了两个接口NamespaceHandler.BeanDefinitionParser,用来实现扩展) 1.设计配置属性和JavaBean ...
- Struts2自定义标签4自定义分页标签
第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- 基于Spring的可扩展Schema进行开发自定义配置标签支持
一.背景 最近和朋友一起想开发一个类似alibaba dubbo的功能的工具,其中就用到了基于Spring的可扩展Schema进行开发自定义配置标签支持,通过上网查资料自己写了一个demo.今天在这里 ...
- 【spring源码学习】spring的IOC容器之自定义xml配置标签扩展namspaceHandler向IOC容器中注册bean
[spring以及第三方jar的案例]在spring中的aop相关配置的标签,线程池相关配置的标签,都是基于该种方式实现的.包括dubbo的配置标签都是基于该方式实现的.[一]原理 ===>sp ...
- 自定义JSP标签库及Properties使用
自定义JSP标签库及Properties使用 自定义JSP标签 自定义JSP标签技术是在JSP 1.1版本中才出现的,它支持用户在JSP文件中自定义标签,这样可以使JSP代码更加简洁. 这些可重用的标 ...
- 自定义jstl标签开发
从jsp1.1开始就可以在jsp页面中使用自定义标签了,使用自定义标签不但可以实现代码重用,而且可以使jsp代码更简洁.Jsp2.0的标签扩展API中又增加了SimpleTag接口和其实现类Simpl ...
- (十三)自定义JSTL标签
前面的博客,我们讲过了 自定义 el函数 : 讲一个 自定义标签技术 : 目录 自定义标签 快速入门:使用标签输出客户机IP 关于标签处理器类的方法 自定义标签功能扩展 传统标签 简单标签 配置简单标 ...
- thinkphp 标签扩展
标签库加载直线电机参数 模板中加载标签库,预加载自定义标签库,扩展内置标签库的加载 请参考:http://document.thinkphp.cn/manual_3_2.html#taglib 自定义 ...
- 使用自定义tld标签简化jsp的繁琐操作
最近做一个树形结构的展示,请求目标页面后,后台只返回简单的List,虽然有想过在jsp页面内做一些操作简化,但是太繁琐了,其他的标签又不能满足需求,所以只能自己做一个.使用tld标签可以简化jsp代码 ...
随机推荐
- 2019阿里云开年Hi购季域名与商标分会场全攻略!
2019阿里云云上Hi购季活动已经于2月25日正式开启,从已开放的活动页面来看,活动分为三个阶段: 2月25日-3月04日的活动报名阶段.3月04日-3月16日的新购满返+5折抢购阶段.3月16日-3 ...
- 警告: deleting object of polymorphic class type which has non_virtual destructor
如果基类里有虚函数,定义了基类指针指向派生类,就会需要定义基类虚析构,这样,基类指针析构的时候,就会先析构派生类,再析构基类. 在用基类指针指向派生类时, 在基类析构函数声明为virtual的时候,d ...
- pip 异常问题
场景:安装的python版本为3.6.4 在使用pip命令时,出现错误:Did not provide a command 如下图所示: 解决办法:pip带上后缀.exe 为什么会出现这种情况? 主要 ...
- NOIP模拟 17.8.18
NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也 ...
- Mysql常用的三种数据库引擎比较
ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数.因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源.ISA ...
- input 手机数字键盘
要一点击提起数字键盘,安卓只要设置input的类型是number或tel, ios 需要 pattern="number"可以直接打开搜狗输入法的数字键盘,可以输入.和数字如果只能 ...
- MySQL数据库操作语句(补充1)(cmd环境运行)
一.字符串类型 enum枚举类型 /* 也叫做枚举类型,类似于单选! 如果某个字段的值只能从某几个确定的值中进行选择,一般就使用enum类型, 在定义的时候需要将该字段所有可能的选项都罗列出来: */ ...
- Laravel 虚拟开发环境 Homestead
简介 Laravel 致力于让你在 PHP 开发过程中更加轻松愉快,这其中也包括本地开发环境的搭建. Vagrant 提供了一种简单.优雅的方式来管理和配置虚拟机. Laravel Homestead ...
- Python接口自动化(二)接口开发
django 配置开发环境 相关命令 python manage.py runserver 127.0.0.1:8000在指定的地址和端口启动服务 python manage.py startapp ...
- linux 下配置多个tomcat同时运行
一个服务器上内存通常有2G或者更多,一个tomcat 运行管理这么多内存有点力不从心,并且貌似一个进程所能建立的线程数量是有限的,于是我们想要在一个服务器上运行多个tomcat.如下是摘抄自:http ...