自己寫的一個邏輯分頁


 個人覺得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 = \think\Db::name('goods')->select();
 7         $goodsModel = new GoodsModel();
 8         $tempArr = array();
 9         foreach($list as $v){
10             $result = \think\Db::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,紀錄完畢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM