个人觉得TP5的分页做的有点简单,不能够处理比较复杂的场景分页,或许是我的理解的不够吧,最近在做一个商品列表的分页的时候,想用一下TP内置的分页功能,可是我脑子太笨,用不好,先把大致情况讲一下,也希望如果有高手看到这篇文章,给与指点。
先上产品列表的截图
这里的类别是存储在类别表的,需要通过类别路径去找,对应的名称,所以我觉得通过内置的分页类我做不到,图片是存储在图片表中,通过id去对应,这个倒是可以通过子查询去做,关键就是那个类别,附上表吧
商品表
图片表
类别表
ok,大致的情况就是这样,我寻思这个不行就自己写一个逻辑分页,现在顺带着纪录一下,以后要用直接来复制,废话不多说,上代码
HTML(需要引入bootstrap,我的后台模板与bootstrap样式有冲突,我就自己写了样式了)
1 <ul class="pagination" style="margin-top:20px;"> 2 <li><a href="{:url('index',array('page'=>1))}">«</a></li> 3 <li <?php if($current_page < 2): ?> class="disabled" <?php endif; ?> ><a href="<?php echo url('index',array('page'=>$current_page-1)) ?>">‹</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)) ?>">›</a></li> 30 <li><a href="<?php echo url('index',array('page'=>$totalPage)) ?>">»</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,纪录完毕