• 自己写的一个逻辑分页


     个人觉得TP5的分页做的有点简单,不能够处理比较复杂的场景分页,或许是我的理解的不够吧,最近在做一个商品列表的分页的时候,想用一下TP内置的分页功能,可是我脑子太笨,用不好,先把大致情况讲一下,也希望如果有高手看到这篇文章,给与指点。

    先上产品列表的截图

    这里的类别是存储在类别表的,需要通过类别路径去找,对应的名称,所以我觉得通过内置的分页类我做不到,图片是存储在图片表中,通过id去对应,这个倒是可以通过子查询去做,关键就是那个类别,附上表吧

    商品表

    图片表

    类别表

    ok,大致的情况就是这样,我寻思这个不行就自己写一个逻辑分页,现在顺带着纪录一下,以后要用直接来复制,废话不多说,上代码

    HTML(需要引入bootstrap,我的后台模板与bootstrap样式有冲突,我就自己写了样式了)

     1 <ul class="pagination" style="margin-top:20px;">
     2                       <li><a href="{:url('index',array('page'=>1))}">&laquo;</a></li>
     3                       <li <?php if($current_page < 2): ?> class="disabled" <?php endif; ?> ><a href="<?php echo url('index',array('page'=>$current_page-1)) ?>">&lsaquo;</a></li>
     4                       <li <?php if(($current_page<1 ? 1 : $current_page) == 1): ?> class="active" <?php endif; ?> ><a href="{:url('index',array('page'=>1))}">1</a></li>
     5                       <?php for($i=2;$i<=$totalPage-1;$i++){ ?>
     6                           <li <?php if($i == ($current_page<1 ? 1 : $current_page) ): ?> class="active" <?php endif; ?> <?php if($i == ($current_page>$totalPage ? $totalPage : $current_page) ): ?> class="active" <?php endif; ?> >
     7                               <?php if($current_page-3>1): ?>
     8                                   <?php if($i==2): ?>
     9                                       <a href="">...</a>
    10                                   <?php endif; ?>
    11                               <?php endif; ?>
    12                               <?php if($current_page>4 && $current_page<$totalPage-4): ?>
    13                                   <?php if(($current_page-3 < $i) && ($current_page+3 > $i)): ?>
    14                                       <a href="<?php echo url('index',array('page'=>$i)) ?>"><?php echo $i; ?></a>
    15                                   <?php endif; ?>
    16                               <?php elseif($current_page<6 && $i<6): ?>
    17                                   <a href="<?php echo url('index',array('page'=>$i)) ?>"><?php echo $i; ?></a>
    18                               <?php elseif(($current_page>$totalPage-6) && ($i>$totalPage-6)): ?>
    19                                   <a href="<?php echo url('index',array('page'=>$i)) ?>"><?php echo $i; ?></a>
    20                               <?php endif; ?>
    21                               <?php if($current_page+4<$totalPage): ?>
    22                                   <?php if($i==$totalPage-1): ?>
    23                                       <a href="">...</a>
    24                                   <?php endif; ?>
    25                               <?php endif; ?>
    26                           </li>
    27                       <?php } ?>
    28                       <li <?php if(($current_page>$totalPage ? $totalPage : $current_page) == $totalPage): ?> class="active" <?php endif; ?> ><a href="<?php echo url('index',array('page'=>$totalPage)) ?>">{$totalPage}</a></li>
    29                       <li <?php if($current_page == $totalPage): ?> class="disabled" <?php endif; ?> ><a href="<?php echo url('index',array('page'=>$current_page+1)) ?>">&rsaquo;</a></li>
    30                       <li><a href="<?php echo url('index',array('page'=>$totalPage)) ?>">&raquo;</a></li>
    31                     </ul>

    style

     1 <style>
     2 .pagination>li>a, .pagination>li>span {
     3     position: relative;
     4     float: left;
     5     padding: 6px 12px;
     6     margin-left: -1px;
     7     line-height: 1.428571429;
     8     text-decoration: none;
     9     background-color: #fff;
    10     border: 1px solid #ddd;
    11 }
    12 .pagination>li>a:hover{
    13     background:#eee;
    14 }
    15 .pagination>li.active>a{
    16   color: #fff;
    17   background-color: #428bca;
    18   border: 1px solid #428bca;
    19   border-bottom-color: transparent;
    20 }
    21 .pagination>li.disabled >a{
    22   color: #ccc;
    23   text-decoration: none;
    24   background-color: transparent;
    25 }
    26 .pagination>li.disabled >a:hover{
    27   cursor: not-allowed;
    28 }
    29 </style>

    goods.php模型中的逻辑分页方法

     1 /*根据传递的数组数据实现分页*/
     2     public function getPageList($data,$current_page,$pageSize){
     3         //总条数
     4         $total = count($data);
     5         //总页码
     6         $totalPage = ceil($total/$pageSize);
     7         $k = 0;
     8         $pageArr = array();
     9         if($current_page > $totalPage){
    10             $current_page = $totalPage;
    11         }
    12         if($current_page < 1){
    13             $current_page = 1;
    14         }
    15         //控制数组显示的条数
    16         for($i=($current_page-1)*$pageSize;$i<$total;$i++){
    17             
    18             if($k < $pageSize){
    19                 $pageArr[] = $data[$i];
    20                 next($data);
    21             }
    22             $k++;
    23         }
    24         return $pageArr;
    25     }

    good.php中的方法

     1 /*商品列表*/
     2     public function index() {
     3         /*调用左侧菜单*/
     4         $menu = new Menu();
     5         $menu->menu();
     6         $list = 	hinkDb::name('goods')->select();
     7         $goodsModel = new GoodsModel();
     8         $tempArr = array();
     9         foreach($list as $v){
    10             $result = 	hinkDb::name('goods_image')->where('id',$v['image_id'])->select();
    11             $cateName = $goodsModel->getCategoryName($v['category_path']);
    12             $v['category_name'] = $cateName;
    13             $v['images'] = $result[0]['path'];
    14             $tempArr[] = $v;
    15             
    16         }
    17         $page = request()->param('page') ? request()->param('page') : 1;
    18         $pageSize = 3;
    19         $list = $tempArr;
    20         //数据总量
    21         $dataNum = count($list);
    22         //总页码
    23         $totalPage = ceil(count($list)/$pageSize);
    24         //当前页码
    25         $current_page = request()->param('page');
    26            $list = $goodsModel->getPageList($list,$page,$pageSize);
    27         $this->assign('dataNum',$dataNum);
    28         $this->assign('totalPage',$totalPage);
    29         $this->assign('current_page',$current_page);
    30         $this->assign('list',$list);
    31         return $this->fetch();
    32     }

    ok,纪录完毕

  • 相关阅读:
    ABAP-年月期间搜索帮助
    Others-Goldengate 数据同步
    ABAP-语音输出
    ABAP-ALV报表导出格式恢复初始画面
    ABAP-动态创建DATABASE/FUNCTION(风险)
    JDK 12 安装
    级数判敛--转自高教
    一文搞懂 JavaScript 中 DOM 相关的距离
    你应该知道的前端编程利器 VS Code
    js变量提升与函数提升的详细过程
  • 原文地址:https://www.cnblogs.com/walblog/p/8036097.html
Copyright © 2020-2023  润新知