php分頁函數與php分頁原理

出處:PHP 通用分頁類的簡單示例

<?php
/**
* PHP通用分頁類
* author phperz.com * $page_size:每頁顯示記錄數
* $rs_total :總記錄數
* 語法:
* new pages($page_size,$rs_total)

* 可用返回值:
* $offset (limit便移量: linit 0,20)
* $page_html (分頁連接: 首頁 上一頁 下一頁 末頁)
*/
class pages{
var $page_size;
var $rs_total;
var $page_total;
var $page;
var $offset;
var $url;
var $pre_page = "page";
var $page_info;
var $page_html;
function __construct($page_size = 20,$rs_total){
$this->page_size = $page_size;
$this->rs_total = $rs_total;
$this->page_total = ceil($rs_total/$page_size);
$this->page = $this->get_page();
$this->offset = $this->get_offset();
$this->url = $this->get_url();
$this->page_info = $this->page_info();
$this->page_html = $this->page_html($this->page_info);
}

//獲取當前頁碼
private function get_page(){
$page = isset($_GET[$this->pre_page])?$this->f_GET($this->pre_page):1;
$page = $page<1?1:$page;
$page = $page>$this->page_total?$this->page_total:$page;

return $page;
}

//獲取當前頁的記錄偏移量
private function get_offset(){
$offset = " limit ".($this->page - 1) * $this->page_size.",".$this->page_size;
return $offset;
}

//生成翻頁html代碼
public function page_html($page_info){
if (!empty($page_info['first'])){
if ($this->page=="" || $this->page==1){
$page_html = "<span class='page_first'>".$page_info['first']."</span>";
}
else {
$page_html = "<span class='page_first'><a href='?".$this->url['first']."'>".$page_info['first']."</a></span>";
}
}//首頁

if (!empty($page_info['pro'])){
if ($this->page=="" || $this->page==1){
$page_html .= "<span class='page_pro'>".$page_info['pro']."</span>";
}
else{
$page_html .= "<span class='page_pro'><a href='?".$this->url['pro']."'>".$page_info['pro']."</a></span>";
}
}//上一頁

if (!empty($page_info['next'])){
if ($this->page >= $this->page_total){
$page_html .= "<span class='page_next'>".$page_info['next']."</span>";
}
else{
$page_html .= "<span class='page_next'><a href='?".$this->url['next']."'>".$page_info['next']."</a></span>";
}
}//下一頁

if (!empty($page_info['last'])){
if ($this->page >= $this->page_total){
$page_html .= "<span class='page_last'>".$page_info['last']."</span>";
}
else{
$page_html .= "<span class='page_last'><a href='?".$this->url['last']."'>".$page_info['last']."</a></span>";
}
}//最後一頁

if (!empty($page_info['t_page'])){
$page_html .= "<span class='t_page'>".str_replace("%i%",$this->page_total,$page_info['t_page'])."</span>";
}
if (!empty($page_info['page'])){
$page_html .= "<span class='now_page'>".str_replace("%i%",$this->page,$page_info['page'])."</span>";
}
if (!empty($page_info['r_total'])){
$page_html .= "<span class='r_page'>".str_replace("%i%",$this->rs_total,$page_info['r_total'])."</span>";
}
return $page_html;

}

//獲取當前 URL
private function get_url(){
$url_str = $_GET;
$query_string = array();
foreach($url_str as $key=>$value){
if ($key == $this->pre_page){
continue;
}
$str .= $key."=".$value."&";
}//end for
$next_tmp = $this->page + 1;
$pro_tmp = $this->page - 1;
$last = $str.$this->pre_page."=".$this->page_total;
$next = $str.$this->pre_page."=".$next_tmp;
$pro = $str.$this->pre_page."=".$pro_tmp;
$first = $str.$this->pre_page."=1";

$query_string = array("pro"=>$pro,"next"=>$next,"last"=>$last,"first"=>$first);
return $query_string;
}

private function page_info(){
$arr = array(
"first" => "首頁",
"next" => "下一頁",
"pro" => "上一頁",
"last" => "末頁",
"t_page"=> "共 %i% 頁",
"page" => "當前第 %i% 頁",
"r_total"=> "共 %i% 條"
);
return $arr;
}//page_info()

//過濾函數
private function f_Get($GET){
$GET = $_GET[$GET];
return preg_replace("/[^0-9]+/i","",$GET);
}
}
?>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章