Taglib自定义万能标签扩展 DownLoad

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

  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>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113163.html原文链接:https://javaforall.net

(0)
上一篇 2021年10月23日 上午11:00
下一篇 2021年10月23日 下午12:00


相关推荐

  • C语言基础知识梳理总结[通俗易懂]

    C语言基础知识梳理总结[通俗易懂]C语言是当代人学习及生活中的必备基础知识,应用十分广泛,下面为大家带来C语言基础知识梳理总结,C语言零基础入门绝对不是天方夜谭!

    2025年10月23日
    4
  • mac安装Android SDK

    mac安装Android SDK1、利用Androidsdk包进行安装:下载Androidsdk包后,点击tools下的android执行文件,SDKmanager打开空白。看网上教程需要重装sdk解决。重装sdk后,SDKmanager打开正常但无法选中各安装包前的复选框和安装按钮(整个SDKmanager点击无响应)。这个问题长时间未解决,所以放弃了此种方法。2、利用Androidcommand-line-tools安装。这种方法大概思路是:下载Androidcmdline-tools->用下载包中的s

    2022年7月21日
    21
  • 海量数据存储技术(cpu制造瓶颈)

    对于海量数据的处理随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失;负载均衡策略:可以降低单台机器的访问负载,降…

    2022年4月14日
    54
  • foreach循环的介绍

    foreach循环的介绍foreach 循环的概念 foreach 循环也叫增强型 for 循环 是 for 循环的一个简化版格式 for 循环对象的类型元素名 对象名 语句 foreach 虽然是 for 循环的简化版本 但是并不是说 foreach 就比 for 更好用 foreach 适用于循环次数未知 或者计算循环次数比较麻烦情况下使用效率更高 但是更为复杂的一些循环还是 for 循环效率更高 以下面的一张图片来简单了解一下 for 循环和 foreach 循环的实现步骤的区别 从这张图片我们可以看出在一些简单的循环里 foreach

    2026年3月16日
    2
  • webstorm激活教程(在线激活)

    webstorm激活教程(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    93
  • jQuery中AJAX写法「建议收藏」

    jQuery中AJAX写法「建议收藏」前言  在jQuery中AJAX的写法有3种,$ajax,$post,$get这三种。其中$post和$get是简易写法,高层的实现,在调用他们的时候,会运行底层封装好的$ajax。运用get方式一$.get("test.cgi",{name:"John",time:"2pm"},function(data){alert("DataLoaded:"+data…

    2026年4月19日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号