自己写的一个逻辑分页

 个人觉得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,纪录完毕

原文地址:https://www.cnblogs.com/walblog/p/8036097.html