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是否调试

  1. <EP:select sql="select * from table order by id desc" limit="10" page="1"></EP:select>
  2. <EP:select table="article" limit="10"></EP:select>
复制代码

无论是频道页面还是列表页面都可以实现分页了。

    1. <div id="pages">{$pages}</div>

Taglib自定义万能标签扩展 DownLoad的更多相关文章

  1. dubbo-config-spring自定义xml标签扩展

    要实现自定义自定义标签扩展,需要有如下步骤(在spring中定义了两个接口NamespaceHandler.BeanDefinitionParser,用来实现扩展) 1.设计配置属性和JavaBean ...

  2. Struts2自定义标签4自定义分页标签

    第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  3. 基于Spring的可扩展Schema进行开发自定义配置标签支持

    一.背景 最近和朋友一起想开发一个类似alibaba dubbo的功能的工具,其中就用到了基于Spring的可扩展Schema进行开发自定义配置标签支持,通过上网查资料自己写了一个demo.今天在这里 ...

  4. 【spring源码学习】spring的IOC容器之自定义xml配置标签扩展namspaceHandler向IOC容器中注册bean

    [spring以及第三方jar的案例]在spring中的aop相关配置的标签,线程池相关配置的标签,都是基于该种方式实现的.包括dubbo的配置标签都是基于该方式实现的.[一]原理 ===>sp ...

  5. 自定义JSP标签库及Properties使用

    自定义JSP标签库及Properties使用 自定义JSP标签 自定义JSP标签技术是在JSP 1.1版本中才出现的,它支持用户在JSP文件中自定义标签,这样可以使JSP代码更加简洁. 这些可重用的标 ...

  6. 自定义jstl标签开发

    从jsp1.1开始就可以在jsp页面中使用自定义标签了,使用自定义标签不但可以实现代码重用,而且可以使jsp代码更简洁.Jsp2.0的标签扩展API中又增加了SimpleTag接口和其实现类Simpl ...

  7. (十三)自定义JSTL标签

    前面的博客,我们讲过了 自定义 el函数 : 讲一个 自定义标签技术 : 目录 自定义标签 快速入门:使用标签输出客户机IP 关于标签处理器类的方法 自定义标签功能扩展 传统标签 简单标签 配置简单标 ...

  8. thinkphp 标签扩展

    标签库加载直线电机参数 模板中加载标签库,预加载自定义标签库,扩展内置标签库的加载 请参考:http://document.thinkphp.cn/manual_3_2.html#taglib 自定义 ...

  9. 使用自定义tld标签简化jsp的繁琐操作

    最近做一个树形结构的展示,请求目标页面后,后台只返回简单的List,虽然有想过在jsp页面内做一些操作简化,但是太繁琐了,其他的标签又不能满足需求,所以只能自己做一个.使用tld标签可以简化jsp代码 ...

随机推荐

  1. LUOGU 3089 后缀排序(模板)

    传送门 解题思路 这是一个神奇的算法,sa[i]表示排名第i为的元素是啥,rk[i]表示第i个元素排名是啥.然后使用基数排序+倍增的思想去处理.主要是参考的这位大佬的博客(https://www.cn ...

  2. 微信小程序--flex常用的属性

    Flex布局 display:flex 指定当前盒子为伸缩盒 flex-direction:column 把盒子内容垂直从上往下排列 row 把盒子内容垂直从左往右排列 flex-wrap: wrap ...

  3. Html5知识点以及兼容性

    什么的HTNL5? HTML5 是最新的 HTML 标准. HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件. HTML5 拥有新的语义.图形以及多媒体元素. HTML5 提供的 ...

  4. java 将word转为PDF (100%与word软件转换一样)

    jdk环境:jdk_8.0.1310.11_64    (64位) 1.引入pom文件 <!-- word转pdf(依赖windows本地的wps) --> <dependency& ...

  5. web服务器与tomcat

    web服务器与tomcat 服务器分类: 硬件服务器和软件服务器 web服务器: 提供资源供别人访问 web: 网页的意思,资源. web资源分类: 动态的web资源:内容有可能发生改变的 静态的we ...

  6. Linux用户程序配置文件

    在 Linux(和一般的 UNIX)中,有无数的“用户”程序.最常见的一种用户程序配置文件是 /etc/lynx.cfg.这是著名的文本浏览器 lynx 的配置文件.通过这个文件,您可以定义代理服务器 ...

  7. 洛谷 P1858 多人背包 DP

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 洛谷 P1858 多人背包 题目描述 求01背包前k优解的价值 ...

  8. prestashop 首页轮播幻灯片图片修改

    后台 -> Modules -> Modules 搜索 home(中文则搜幻灯片)

  9. Spring_Aop_(二)

    切面的优先级 @Order(1)注解 指定切面的优先级,值越小优先级越高 @Order(1) @Aspect @Component public class VlidationAspect { @Be ...

  10. 【JZOJ4715】【NOIP2016提高A组模拟8.19】树上路径

    题目描述 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和) 输入 第一行给出N,S,E.N代表树的点数,S,E如题目描述. 下面N- ...