国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php中分頁原與與分頁類

2024-05-04 23:06:47
字體:
來源:轉載
供稿:網友

所謂分頁顯示,也就是將數據庫中的結果集人為的分成一段一段的來顯示,這里需要兩個初始的參數: 每頁多少條記錄($PageSize)?

當前是第幾頁($CurrentPageID)?

現在只要再給我一個結果集,我就可以顯示某段特定的結果出來.

至于其他的參數,比如:上一頁($PReviousPageID)、下一頁($NextPageID)、總頁數($numPages)等等,都可以根據前邊這幾個東西得到.

以MySQL數據庫為例,如果要從表內截取某段內容,sql語句可以用:select * from table limit offset, rows.看看下面一組sql語句,嘗試一下發現其中的規率.

前10條記錄:select * from table limit 0,10

第11至20條記錄:select * from table limit 10,10

第21至30條記錄:select * from table limit 20,10

……

這一組sql語句其實就是當$PageSize=10的時候取表內每一頁數據的sql語句,我們可以總結出這樣一個模板:

select * from table limit ($CurrentPageID – 1) * $PageSize, $PageSize

拿這個模板代入對應的值和上邊那一組sql語句對照一下看看是不是那么回事.搞定了最重要的如何獲取數據的問題以后,剩下的就僅僅是傳遞參數,構造合適的sql語句然后使用php從數據庫內獲取數據并顯示了.以下我將用具體代碼加以說明.

3、簡單代碼

請詳細閱讀以下代碼,自己調試運行一次,最好把它修改一次,加上自己的功能,比如搜索等等.

實例代碼如下:

  1. <?php 
  2. // 建立數據庫連接 
  3. $link = mysql_connect(“localhost”, “mysql_user”, “mysql_passWord”) 
  4. or die(“Could not connect: ” . mysql_error()); 
  5. // 獲取當前頁數 
  6. if( isset($_GET['page']) ){ 
  7. $page = intval$_GET['page'] ); 
  8. else
  9. $page = 1; 
  10. // 每頁數量 
  11. $PageSize = 10; 
  12. // 獲取總數據量 
  13. $sql = “select count(*) as amount from table”; 
  14. $result = mysql_query($sql); 
  15. $row = mysql_fetch_row($result); 
  16. $amount = $row['amount']; 
  17. // 記算總共有多少頁 
  18. if$amount ){ 
  19. if$amount < $page_size ){ $page_count = 1; }               //如果總數據量小于$PageSize,那么只有一頁 
  20. if$amount % $page_size ){                                  //取總數據量除以每頁數的余數 
  21. $page_count = (int)($amount / $page_size) + 1;           //如果有余數,則頁數等于總數據量除以每頁數的結果取整再加一 
  22. }else
  23. $page_count = $amount / $page_size;                      //如果沒有余數,則頁數等于總數據量除以每頁數的結果 
  24. else
  25. $page_count = 0; 
  26. // 翻頁鏈接 
  27. $page_string = ”; 
  28. if$page == 1 ){ 
  29. $page_string .= ‘第一頁|上一頁|’; 
  30. else
  31. $page_string .= ‘<a href=?page=1>第一頁</a>|<a href=?page=’.($page-1).’>上一頁</a>|’; 
  32. if( ($page == $page_count) || ($page_count == 0) ){ 
  33. $page_string .= ‘下一頁|尾頁’; 
  34. else
  35. $page_string .= ‘<a href=?page=’.($page+1).’>下一頁</a>|<a href=?page=’.$page_count.’>尾頁</a>’; 
  36. // 獲取數據,以二維數組格式返回結果 
  37. if$amount ){ 
  38. $sql = “select * from table order by id desc limit “. ($page-1)*$page_size .”, $page_size”; 
  39. $result = mysql_query($sql); 
  40. while ( $row = mysql_fetch_row($result) ){ 
  41. $rowset[] = $row
  42. }else
  43. $rowset = array(); 
  44. // 沒有包含顯示結果的代碼,那不在討論范圍,只要用foreach就可以很簡單的用得到的二維數組來顯示結果 
  45. ?> 

PHP分頁器制作,自動生成分面頁碼,JS調用函數

實例代碼如下:

  1. <?php 
  2. class PageView{ 
  3.     /**頁碼**/ 
  4.     public $pageNo = 1; 
  5.     /**頁大小**/ 
  6.     public $pageSize = 20; 
  7.     /**共多少頁**/ 
  8.     public $pageCount = 0; 
  9.     /**總記錄數**/ 
  10.     public $totalNum = 0; 
  11.     /**偏移量,當前頁起始行**/ 
  12.     public $offSet = 0; 
  13.     /**每頁數據**/ 
  14.     public $pageData = array(); 
  15.     /**是否有上一頁**/ 
  16.     public $hasPrePage = true; 
  17.     /**是否有下一頁**/ 
  18.     public $hasNextPage = true; 
  19.     public $pageNoList = array(); 
  20.     public $jsFunction ='jsFunction'
  21.     /** 
  22.      *  
  23.      * @param unknown_type $count 總行數 
  24.      * @param unknown_type $size 分頁大小 
  25.      * @param unknown_type $string 
  26.      */ 
  27.     public function __construct($count=0, $size=20,$pageNo=1,$pageData =array(),$jsFunction='jsFunction'){ 
  28.         $this->totalNum = $count;//總記錄數 
  29.         $this->pageSize = $size;//每頁大小 
  30.         $this->pageNo = $pageNo
  31.         //計算總頁數 
  32.         $this->pageCount = ceil($this->totalNum/$this->pageSize); 
  33.         $this->pageCount = ($this->pageCount<=0)?1:$this->pageCount; 
  34.         //檢查pageNo 
  35.         $this->pageNo = $this->pageNo == 0 ? 1 : $this->pageNo; 
  36.         $this->pageNo = $this->pageNo > $this->pageCount? $this->pageCount : $this->pageNo; 
  37.         //計算偏移 
  38.         $this->offset = ( $this->pageNo - 1 ) * $this->pageSize; 
  39.         //計算是否有上一頁下一頁 
  40.         $this->hasPrePage = $this->pageNo == 1 ?false:true; 
  41.         $this->hasNextPage = $this->pageNo >= $this->pageCount ?false:true; 
  42.         $this->pageData = $pageData
  43.         $this->jsFunction = $jsFunction
  44.     } 
  45.     /** 
  46.      * 分頁算法 
  47.      * @return 
  48.      */ 
  49.     private function generatePageList(){ 
  50.         $pageList = array(); 
  51.         if($this->pageCount <= 9){ 
  52.             for($i=0;$i<$this->pageCount;$i++){ 
  53.                 array_push($pageList,$i+1); 
  54.             } 
  55.         }else
  56.             if($this->pageNo <= 4){ 
  57.                 for($i=0;$i<5;$i++){ 
  58.                     array_push($pageList,$i+1); 
  59.                 } 
  60.                 array_push($pageList,-1); 
  61.                 array_push($pageList,$this->pageCount); 
  62.             }else if($this->pageNo > $this->pageCount - 4){ 
  63.                 array_push($pageList,1); 
  64.                 array_push($pageList,-1); 
  65.                 for($i=5;$i>0;$i--){ 
  66.                     array_push($pageList,$this->pageCount - $i+1); 
  67.                 } 
  68.             }else if($this->pageNo > 4 && $this->pageNo <= $this->pageCount - 4){ 
  69.                 array_push($pageList,1); 
  70.                 array_push($pageList,-1); 
  71.                 array_push($pageList,$this->pageNo -2); 
  72.                 array_push($pageList,$this->pageNo -1); 
  73.                 array_push($pageList,$this->pageNo); 
  74.                 array_push($pageList,$this->pageNo + 1); 
  75.                 array_push($pageList,$this->pageNo + 2); 
  76.                 array_push($pageList,-1); 
  77.                 array_push($pageList,$this->pageCount); 
  78.             } 
  79.         } 
  80.         return $pageList
  81.     } 
  82.     /*** 
  83.      * 創建分頁控件 
  84.     * @param 
  85.     * @return String 
  86.     */ 
  87.     public function echoPageAsDiv(){ 
  88.         $pageList = $this->generatePageList(); 
  89.         $pageString ="<div class='pagination'><div class='page-bottom'>"
  90.         if(!emptyempty($pageList)){ 
  91.             if($this->pageCount >1){ 
  92.                 if($this->hasPrePage){ 
  93.                     $pageString = $pageString ."<a class='page-next' href="javascript:" .$this->jsFunction . "(" . ($this->pageNo-1) . ")">上一頁</a>"
  94.                 } 
  95.                 foreach ($pageList as $k=>$p){ 
  96.                     if($this->pageNo == $p){ 
  97.                         $pageString = $pageString ."<span class='page-cur'>" . $this->pageNo . "</span>"
  98.                         continue
  99.                     } 
  100.                     if($p == -1){ 
  101.                         $pageString = $pageString ."<span class='page-break'>...</span>"
  102.                         continue
  103.                     } 
  104.                     $pageString = $pageString ."<a href="javascript:" .$this->jsFunction . "(" . $p . ")">" . $p . "</a>"
  105.                 } 
  106.                 if($this->hasNextPage){ 
  107.                     $pageString = $pageString ."<a class='page-next' href="javascript:" .$this->jsFunction . "(" . ($this->pageNo+1) . ")">下一頁</a>"
  108.                 } 
  109.             } 
  110.         } 
  111.         $pageString = $pageString .("</div></div>"); 
  112.         return $pageString
  113.     } 
  114. ?> 
  115. <style type="text/css"
  116. <!-- 
  117. .pagination {font-family: Tahoma;overflow: hidden; padding-top: 12px; text-align: center;} 
  118. .pagination-tab { margin-bottom: 20px;} 
  119. .pagination a, .pagination .page-cur, .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g, .pagination .page-break, .pagination .page-skip { 
  120.     display: inline-block;font-family: Tahoma,SimSun,Arial; height: 22px;line-height:22px; margin: 0; min-width: 16px;padding: 0 5px; text-align: center; vertical-align: top; white-space: nowrap;} 
  121. .pagination a, .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g, .pagination .page-cur, .pagination .page-break { 
  122.     border: 1px solid #ed3d83; color:#e9357d; font-weight:bold;} 
  123. .pagination a:hover { border: 1px solid #ed3d83;text-decoration: none; background-color:#f95f9d; color:#fff;} 
  124. .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g { width: 36px; background-image: url(../static/img/page.gif);} 
  125. .pagination .page-prev { background-position: -0px -38px; padding-left: 16px;} 
  126. .pagination .page-prev_g { background-position:0px -59px; padding-left: 16px; color:#cbcbcb; font-weight:normal;} 
  127. .pagination .page-next { background-position: 0px 0px; padding-right: 16px; font-weight:normal;} 
  128. .pagination .page-next_g { background-position: -0px -19px; padding-right: 16px; color:#cbcbcb;} 
  129. .pagination .page-cur {background-color: #f95f9d; border: 1px solid #ed3d83;color: #fff;font-weight: bold;} 
  130. .pagination .page-break {border: medium none; background:none transparent; color:#333;} 
  131. --> 
  132. </style> 

PHP調用實例代碼如下:

  1. $pageNo = $_GET['pageNo']; 
  2. if(emptyempty($pageNo)){ 
  3. //分頁數據 
  4. $pageData = News::getNewsPage($pageNo,$pageSize); 
  5.        //取得總行數 
  6. $count = News::getNewsCount(); 
  7.         //創建分頁器 
  8. $p = new PageView($count['0']['TOTAL'],$pageSize,$pageNo,$pageData); 
  9.      //生成頁碼 
  10. $pageViewString = $p->echoPageAsDiv(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 治多县| 上虞市| 旬阳县| 宜阳县| 汤原县| 阿城市| 寿阳县| 进贤县| 安溪县| 获嘉县| 松江区| 军事| 仁化县| 汉寿县| 阳泉市| 淄博市| 阿巴嘎旗| 布尔津县| 象州县| 鞍山市| 靖宇县| 阳西县| 安陆市| 武城县| 淮阳县| 昌乐县| 滦平县| 视频| 姚安县| 商城县| 遂川县| 兴安县| 阿瓦提县| 同德县| 十堰市| 灌阳县| 泸西县| 鹤庆县| 南澳县| 遂川县| 青冈县|