編寫思路:
1.分頁函數能夠幫助咱們完成select語句的limit部分php
每頁顯示3條
limit ($_GET[$page]-1)*$page_size,$page_size //第一頁 0,3
limit ($_GET[$page]-1)*$page_size,$page_size //第二頁 3,3
limit ($_GET[$page]-1)*$page_size,$page_size //第三頁 6,3html
2.分頁函數應該幫助咱們設置好頁碼列表的html代碼部分
(1)根據傳入函數的$num_btn參數來顯示按鈕數目
1)要顯示的按鈕數目$num_btn大於總頁碼數目$page_num_all
2)$num_btn<$page_num_all
這種狀況下咱們有一種顯示策略是:
理想狀態:當前頁的左邊按鈕數目應該和右邊的按鈕數目相等,或者右邊多一個按鈕
不理想的狀況:一、左邊第一個按鈕號已是<1了
二、最後一個按鈕號已是大於總頁碼數$page_num_all數組
if($num_btn>=$page_num_all){ //把全部的頁碼按鈕所有顯示 for($i=1;$i<=$page_num_all;$i++){//這邊的$page_num_all是限制循環次數以控制顯示按鈕數目的變量,$i是記錄頁碼號 if($_GET[$page]==$i){ $html[$i]="<span>{$i}</span>"; }else{ $html[$i]="<a href='{$url}{$i}'>{$i}</a>"; } } }else{ $num_left=floor(($num_btn-1)/2); $start=$_GET[$page]-$num_left; $end=$start+($num_btn-1); if($start<1){ $start=1; } if($end>$page_num_all){ $start=$page_num_all-($num_btn-1); } for($i=0;$i<$num_btn;$i++){ if($_GET[$page]==$start){ $html[$start]="<span>{$start}</span>"; }else{ $html[$start]="<a href='{$url}{$start}'>{$start}</a>"; } $start++; } }
(2)當按鈕數目大於等於3的時候作省略號效果:
當第一個按鈕的頁碼不是1的時候,咱們就把第一個按鈕替換成1...
當最後一個按鈕的頁碼不是$page_num_all的時候,咱們就把最後一個按鈕替換成...$page_num_all
函數
if(count($html)>=3){ reset($html); $key_first=key($html); end($html); $key_end=key($html); if($key_first!=1){ array_shift($html); array_unshift($html,"<a href='{$url}1'>1...</a>"); } if($key_end!=$page_num_all){ array_pop($html); array_push($html,"<a href='{$url}{$page_num_all}'>...{$page_num_all}</a>"); } }
全部功能實現後php代碼以下:ui
<?php header("Content-type:text/html;charset=utf-8"); /* 參數說明: $count:總記錄數 $page_size:每頁顯示的記錄數 $num_btn:要展現的頁碼按鈕數目 $page:分頁的get參數 */ function page($count,$page_size,$num_btn=10,$page='page'){ if(!isset($_GET[$page]) || !is_numeric($_GET[$page]) || $_GET[$page]<1){ $_GET[$page]=1; } //總頁數 $page_num_all=ceil($count/$page_size); if($_GET[$page]>$page_num_all){ $_GET[$page]=$page_num_all; } $start=($_GET[$page]-1)*$page_size; $limit="limit {$start},{$page_size}"; $current_url=$_SERVER['REQUEST_URI'];//獲取當前界面url地址 $arr_current=parse_url($current_url);//將當前url拆分到數組中 $current_path=$arr_current['path'];//將文件路徑保存起來 $url=''; if(isset($arr_current['query'])){ parse_str($arr_current['query'],$arr_query); unset($arr_query[$page]); if(empty($arr_query)){ $url="{$current_path}?{$page}="; }else{ $other=http_build_query($arr_query); $url="{$current_path}?{$other}&{$page}="; } }else{ $url="{$current_path}?{$page}="; } $html=array(); if($num_btn>=$page_num_all){ //把全部的頁碼按鈕所有顯示 for($i=1;$i<=$page_num_all;$i++){//這邊的$page_num_all是限制循環次數以控制顯示按鈕數目的變量,$i是記錄頁碼號 if($_GET[$page]==$i){ $html[$i]="<span>{$i}</span>"; }else{ $html[$i]="<a href='{$url}{$i}'>{$i}</a>"; } } }else{ $num_left=floor(($num_btn-1)/2); $start=$_GET[$page]-$num_left; $end=$start+($num_btn-1); if($start<1){ $start=1; } if($end>$page_num_all){ $start=$page_num_all-($num_btn-1); } for($i=0;$i<$num_btn;$i++){ if($_GET[$page]==$start){ $html[$start]="<span>{$start}</span>"; }else{ $html[$start]="<a href='{$url}{$start}'>{$start}</a>"; } $start++; } //若是按鈕數目大於等於3的時候作省略號效果 if(count($html)>=3){ reset($html); $key_first=key($html); end($html); $key_end=key($html); if($key_first!=1){ array_shift($html); array_unshift($html,"<a href='{$url}1'>1...</a>"); } if($key_end!=$page_num_all){ array_pop($html); array_push($html,"<a href='{$url}{$page_num_all}'>...{$page_num_all}</a>"); } } } //當前頁不是第一頁,觸發上一頁按鈕 if($_GET[$page]!=1){ $prev=$_GET[$page]-1; array_unshift($html,"<a href='{$url}{$prev}'><< 上一頁</a>"); } //當前頁不是最後一頁,觸發下一頁按鈕 if($_GET[$page]!=$page_num_all){ $next=$_GET[$page]+1; array_push($html,"<a href='{$url}{$next}'>下一頁>>> </a>"); } $html=implode(' ',$html); $data=array( 'limit'=>$limit, 'html'=>$html ); return $data; } $page=page(100,10,5); echo $page['html']; ?>