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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一维数组二分法查找_excel二维数组查找匹配

    一维数组二分法查找_excel二维数组查找匹配在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target = 5,返回

  • C++中深入理解dynamic_cast

    C++中深入理解dynamic_cast转载:https://blog.csdn.net/gaojing303504/article/details/78860773dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成

  • 离心泵CAE_2_ICEM剖分网格_2_叶轮流道[通俗易懂]

    离心泵CAE_2_ICEM剖分网格_2_叶轮流道[通俗易懂]针对本科毕设中所涉及到的离心泵数值分析和性能计算,将用最简单粗暴的方法,讲解如何基于CFturbo、ICEM、FLUENT来开展离心泵水力设计和性能分析的计算机辅助(CAE)实现。离心泵的水力设计由CFturbo软件实现;网格剖分由ICEM软件实现;CFD数值计算由FLUENT软件实现;并验证设计值是否达到。这里是第二部分,ICEM软件实现离心泵过流通道的网格剖分,含叶轮流道、进口延伸段、蜗壳流道的网格剖分。由于三个流道分开来划分网格,所以分三部分来分别讲解,这里是第2篇,叶轮流道的网格剖分……

  • 十、模板方法模式—制作更多好喝的饮品! #和设计模式一起旅行#

    无规矩不成方圆!故事背景在安装了酷炫了碉堡了的灯之后,我饿设计模式MM经营的奶茶店生意更加火爆,有不同国家的顾客,那么为了满足更多消费者的口味,我们推出了中国龙井苹果茶和叶门摩卡牛奶咖啡。其中制作的过程:把水烧开将咖啡/茶叶放到杯子里用沸水冲泡加入牛奶/苹果汁下面用代码来表示茶和咖啡的制作过程!//龙井苹果茶制作public class LongJi…

  • 详解马氏距离中的协方差矩阵计算(超详细)

    详解马氏距离中的协方差矩阵计算(超详细)一、概率统计基本知识1.样本均值样本均值(Mean)是在总体中的样本数据的平均值。2.样本方差方差(Variance)是度量一组数据的离散(波动)程度。方差是各个样本与样本均值的差的平方和的均值,分母除以n-1是为了满足无偏估计:3.样本标准差4.协方差协方差(Covariance)是度量两个变量的变动的同步程度,也就是度量两个变量线性相关性程度。若协方差大于0,表示一个变量增大时另一个变量也会增大,即两个变量呈正相关;若协方差小于0,表示一个变量增大时另一个变量会减小,即两个变量呈负相关

  • transactionscope mysql_c# – 嵌套的TransactionScope在测试中失败

    transactionscope mysql_c# – 嵌套的TransactionScope在测试中失败我正在使用MSTest通过MySQLConnector和使用EntityFramework4.3对MysqL5.5.19数据库运行一些自动化测试.我正在尝试在我的数据库访问类库中使用TransactionScope在需要时执行回滚.另外,在我的测试代码中,我希望在每次测试之前使用TransactionScope将数据库恢复到已知状态.我使用TestInitialize和TestCleanup…

发表回复

您的电子邮箱地址不会被公开。

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