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代码 ...
随机推荐
- mybatis添加数据返回主键
程序结构图: 表结构: 创表sql: Create Table CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `us ...
- 【CS Round #44 (Div. 2 only) B】Square Cover
[链接]点击打开链接 [题意] 给你一个n*m的矩形,让你在其中圈出若干个子正方形,使得这些子正方形里面的所有数字都是一样的. 且一样的数字,都是在同一个正方形里面.问你有没有方案. [题解] 相同的 ...
- arcgis 点线面操作
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇
ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...
- C# 详解反射
原博客:http://www.cnblogs.com/Stephenchao/p/4481995.html 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的 ...
- [新手必看] 17个常见的Python运行时错误
对于刚入门的Pythoner在学习过程中运行代码是或多或少会遇到一些错误,刚开始可能看起来比较费劲.随着代码量的积累,熟能生巧当遇到一些运行时错误时能够很快的定位问题原题.下面整理了常见的17个错误, ...
- iView3.x Anchor(锚点)组件 导航锚点
iView3.x Anchor(锚点)组件 导航锚点 iview 3.x框架中新添了一个Anchor(锚点组件),用这个组件去做页面的分类导航正好合适,但是苦于官方文档太过抽象研究了一整天,才勉强可以 ...
- LeetCode141 Linked List Cycle. LeetCode142 Linked List Cycle II
链表相关题 141. Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can y ...
- 六.基本数据结构-双端队列(Deque)
一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制 ...
- 第三十二讲:UML类图(下)
一个类能够看到另外一个类的属性和方法,那么这两个类是关联的.