php+ajax實作的分頁類別範例程式碼

怪我咯
發布: 2023-03-13 21:20:02
原創
1109 人瀏覽過

分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設計中最常處理的事件之一。對於web程式設計的老手來說,編寫這種程式碼實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解。

一、分頁原則:
       所謂分頁顯示,也就是將資料庫中的結果集人為的分成一段的來顯示,這裡需要兩個初始的參數:

       每頁多少筆記錄($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 from
  table limit 20,10
……
        這一組sql語句其實是當$PageSize=10的時候取表內每一頁資料的sql語句,我們可以總結出這樣一個範本:
       * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
        拿這個模板代入對應的值和上邊那一組sql語句對照一下看看是不是那麼回事。搞定了最重要的如何取得資料的問題以後,剩下的就只是傳遞參數,建構合適的sql語句然後使用php從資料庫內取得資料並顯示了。

本篇文章主要介紹php+ajax實現的分頁類,實現的最終效果如下圖

php+ajax實作的分頁類別範例程式碼

程式碼如下

<?php 
//本分页类不处理SQL; 
//大大的加快了分页功能 
//http://blog.csdn.net/fkedwgwy 
//潇湘博客--潇湘 
/** 
演示 
require_once(&#39;../libs/classes/page.class.php&#39;); 
$page=new page(array(&#39;total&#39;=>1000,&#39;perpage&#39;=>20)); 
echo &#39;mode:1<br>&#39;.$page->show(); 
echo &#39;<hr>mode:2<br>&#39;.$page->show(2); 
echo &#39;<hr>mode:3<br>&#39;.$page->show(3); 
echo &#39;<hr>mode:4<br>&#39;.$page->show(4); 
echo &#39;<hr>开始AJAX模式:&#39;; 
$ajaxpage=new page(array(&#39;total&#39;=>1000,&#39;perpage&#39;=>20,&#39;ajax&#39;=>&#39;ajax_page&#39;,&#39;page_name&#39;=>&#39;test&#39;)); 
echo &#39;mode:1<br>&#39;.$ajaxpage->show(); 
*/ 
class Zend_Page 
{ 
/** 
* config ,public 
*/ 
var $page_name="page";//page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page 
var $next_page=&#39;>&#39;;//下一页 
var $pre_page=&#39;<&#39;;//上一页 
var $first_page=&#39;First&#39;;//首页 
var $last_page=&#39;Last&#39;;//尾页 
var $pre_bar=&#39;<<&#39;;//上一分页条 
var $next_bar=&#39;>>&#39;;//下一分页条 
var $format_left=&#39;&#39;; 
var $format_right=&#39;&#39;; 
var $is_ajax=false;//是否支持AJAX分页模式 
var $next_ten_page=">>>"; 
var $per_ten_page="<<<"; 

/** 
* private 
* 
*/ 
var $pagebarnum=10;//控制记录条的个数。 
var $totalpage=0;//总页数 
var $ajax_action_name=&#39;&#39;;//AJAX动作名 
var $nowindex=1;//当前页 
var $url="";//url地址头 
var $offset=0; 
var $total=&#39;&#39;; 

/** 
* constructor构造函数 
* 
* @param array $array[&#39;total&#39;],$array[&#39;perpage&#39;],$array[&#39;nowindex&#39;],$array[&#39;url&#39;],$array[&#39;ajax&#39;]... 
*/ 
function Zend_Page($array) 
{ 
if(is_array($array)){ 
if(!array_key_exists(&#39;total&#39;,$array))$this->error(FUNCTION,&#39;need a param of total&#39;); 
$total=intval($array[&#39;total&#39;]); 
$perpage=(array_key_exists(&#39;perpage&#39;,$array))?intval($array[&#39;perpage&#39;]):10; 
$nowindex=(array_key_exists(&#39;nowindex&#39;,$array))?intval($array[&#39;nowindex&#39;]):&#39;&#39;; 
$url=(array_key_exists(&#39;url&#39;,$array))?$array[&#39;url&#39;]:&#39;&#39;; 
}else{ 
$total=$array; 
$perpage=10; 
$nowindex=&#39;&#39;; 
$url=&#39;&#39;; 
} 
if((!is_int($total))||($total<0))$this->error(FUNCTION,$total.&#39; is not a positive integer!&#39;); 
if((!is_int($perpage))||($perpage<=0))$this->error(FUNCTION,$perpage.&#39; is not a positive integer!&#39;); 
if(!empty($array[&#39;page_name&#39;]))$this->set(&#39;page_name&#39;,$array[&#39;page_name&#39;]);//设置pagename 
$this->_set_nowindex($nowindex);//设置当前页 
$this->_set_url($url);//设置链接地址 
$this->totalpage=ceil($total/$perpage); 
$this->total=$total; 
$this->offset=($this->nowindex-1)*$perpage; 
if(!empty($array[&#39;ajax&#39;]))$this->open_ajax($array[&#39;ajax&#39;]);//打开AJAX模式 
} 
/** 
* 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception 
* 
* @param string $var 
* @param string $value 
*/ 
function set($var,$value) 
{ 
if(in_array($var,get_object_vars($this))) 
$this->$var=$value; 
else { 
$this->error(FUNCTION,$var." does not belong to PB_Page!"); 
} 

} 
/** 
* 打开倒AJAX模式 
* 
* @param string $action 默认ajax触发的动作。 
*/ 
function open_ajax($action) 
{ 
$this->is_ajax=true; 
$this->ajax_action_name=$action; 
} 
/** 
* 获取显示"下一页"的代码 
* 
* @param string $style 
* @return string 
*/ 
function next_page($style=&#39;&#39;) 
{ 
if($this->nowindex<$this->totalpage){ 
return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style); 
} 
return &#39;<span class="&#39;.$style.&#39;">&#39;.$this->next_page.&#39;</span>&#39;; 
} 

/** 
* 获取显示“上一页”的代码 
* 
* @param string $style 
* @return string 
*/ 
function pre_page($style=&#39;&#39;) 
{ 
if($this->nowindex>1){ 
return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style); 
} 
return &#39;<span class="&#39;.$style.&#39;">&#39;.$this->pre_page.&#39;</span>&#39;; 
} 

/** 
* 获取显示“上十页”的代码 
* 
* @param string $style 
* @return string 
*/ 
function pre_ten_page($style=&#39;&#39;) 
{ 
if(intval($this->nowindex/10)+1>1){ 
return $this->_get_link($this->_get_url(intval($this->nowindex/10)*10-5),$this->pre_ten_page,$style); 
} 
return &#39;<span class="&#39;.$style.&#39;">&#39;.$this->pre_ten_page.&#39;</span>&#39;; 
} 

/** 
* 获取显示"下十页"的代码 
* 
* @param string $style 
* @return string 
*/ 
function next_ten_page($style=&#39;&#39;) 
{ 
if(intval($this->nowindex/10) <intval($this->totalpage/10)){ 
return $this->_get_link($this->_get_url((intval($this->nowindex/10)+1)*10+5),$this->next_ten_page,$style); 
} 
return &#39;<span class="&#39;.$style.&#39;">&#39;.$this->next_ten_page.&#39;</span>&#39;; 
} 

/** 
* 获取显示“首页”的代码 
* 
* @return string 
*/ 
function first_page($style=&#39;&#39;) 
{ 
if($this->nowindex==1){ 
return &#39;<span class="&#39;.$style.&#39;">&#39;.$this->first_page.&#39;</span>&#39;; 
} 
return $this->_get_link($this->_get_url(1),$this->first_page,$style); 
} 

/** 
* 获取显示“尾页”的代码 
* 
* @return string 
*/ 
function last_page($style=&#39;&#39;) 
{ 
if($this->nowindex==$this->totalpage){ 
return &#39;<span class="&#39;.$style.&#39;">&#39;.$this->last_page.&#39;</span>&#39;; 
} 
return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style); 
} 

function nowbar($style=&#39;&#39;,$nowindex_style=&#39;&#39;) 
{ 
$plus=ceil($this->pagebarnum/2); 
if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex); 
$begin=$this->nowindex-$plus+1; 
$begin=($begin>=1)?$begin:1; 
$return=&#39;&#39;; 
for($i=$begin;$i<$begin+$this->pagebarnum;$i++) 
{ 
if($i<=$this->totalpage){ 
if($i!=$this->nowindex) 
$return.=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style)); 
else 
$return.=$this->_get_text(&#39;<span class="&#39;.$nowindex_style.&#39;">&#39;.$i.&#39;</span>&#39;); 
}else{ 
break; 
} 
$return.="\n"; 
} 
unset($begin); 
return $return; 
} 
/** 
* 获取显示跳转按钮的代码 
* 
* @return string 
*/ 
function select() 
{ 
$return=&#39;<select name="PB_Page_Select" onchange="location.replace(this.value)" >&#39;; 
for($i=1;$i<=$this->totalpage;$i++) 
{ 
if($i==$this->nowindex){ 
$return.=&#39;<option value=&#39;.$this->_get_url($i).&#39; selected>&#39;.$i.&#39;</option>&#39;; 
}else{ 
$return.=&#39;<option value=&#39;.$this->_get_url($i).&#39;>&#39;.$i.&#39;</option>&#39;; 
} 
} 
unset($i); 
$return.=&#39;</select>&#39;; 
return $return; 
} 

/** 
* 获取mysql 语句中limit需要的值 
* 
* @return string 
*/ 
function offset() 
{ 
return $this->offset; 
} 

/** 
* 控制分页显示风格(你可以增加相应的风格) 
* 
* @param int $mode 
* @return string 
*/ 
function show($mode=1,$url=&#39;&#39;) 
{ 
switch ($mode) 
{ 
case &#39;1&#39;: 
$this->next_page=&#39;下一页&#39;; 
$this->pre_page=&#39;上一页&#39;; 
return $this->pre_page().$this->nowbar().$this->next_page().&#39;第&#39;.$this->select().&#39;页&#39;; 
break; 
case &#39;2&#39;: 
$this->next_page=&#39;下一页&#39;; 
$this->pre_page=&#39;上一页&#39;; 
$this->first_page=&#39;首页&#39;; 
$this->last_page=&#39;尾页&#39;; 
return $this->first_page().$this->pre_page().&#39;[第&#39;.$this->nowindex.&#39;页]&#39;.$this->next_page().$this->last_page().&#39;第&#39;.$this->select().&#39;页&#39;; 
break; 
case &#39;3&#39;: 
$this->next_page=&#39;下一页&#39;; 
$this->pre_page=&#39;上一页&#39;; 
$this->first_page=&#39;首页&#39;; 
$this->last_page=&#39;尾页&#39;; 
return $this->first_page().$this->pre_page().$this->next_page().$this->last_page(); 
break; 
case &#39;4&#39;: 
$this->next_page=&#39;next&#39;; 
$this->pre_page=&#39;last&#39;; 
return $this->pre_page().$this->nowbar().$this->next_page(); 
break; 
case &#39;5&#39;: 
return $this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page().$this->next_bar(); 
break; 
case &#39;6&#39;: 
//启用了“上一页”,“下一页”,“最后一页”。可根据情况启用“第一页”。 
//$this->first_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/propageup.jpg" width="64" height="13" >&#39;; 
$this->pre_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/propageup.jpg" style="width:58px; height:18px;">&#39;; 
$this->next_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/propagedown.jpg" style="width:58px; height:18px;">&#39;; 
$this->last_page=&#39;最后一页&#39;; 
//return "<td width=39 align=&#39;center&#39;>".$this->select()."</td>"."<td><span style=&#39;color:#666666&#39;>页</span></td>"."<td width=72 align=right>".$this->first_page()."</td>"."<td width=72 align=right>".$this->pre_page()."</td>"."<td width=72 align=right>".$this->next_page()."</td>"."<td width=72 align=right>".$this->last_page()."</td>"; 
return "<td align=&#39;right&#39;>共有[".$this->total."]件商品    ".$this->nowindex."/".$this->totalpage."页</td>"."<td width=145>".$this->pre_page()."  ".$this->next_page()."</td>"."<td width=145>".$this->last_page()."  ".$this->select()."  页  "; 
break; 
case &#39;7&#39;: 
$this->next_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/arrpagedown.jpg"/>&#39;; 
$this->pre_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/arrpageup.jpg"/>&#39;; 
$this->first_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/arrhome.jpg"/>&#39;; 
$this->last_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/arrend.jpg"/>&#39;; 
if($this->totalpage==0) 
{$this->nowindex=0;} 
return $this->first_page()."  ".$this->pre_page()."  ".$this->next_page()."  ".$this->last_page()."  ".$this->select(); 
break; 
case &#39;8&#39;: 
//启用了“上一页”,“下一页”,“最后一页”。可根据情况启用“第一页”。 
//$this->first_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/propageup.jpg" width="64" height="13" >&#39;; 
$this->pre_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/propageup.jpg" style="width:58px; height:18px;">&#39;; 
$this->next_page=&#39;<img src="&#39;.HOSTPATH.&#39;images/propagedown.jpg" style="width:58px; height:18px;">&#39;; 
$this->last_page=&#39;最后一页&#39;; 
if($this->totalpage==0) 
{$this->nowindex=0;} 
//return "<td width=39 align=&#39;center&#39;>".$this->select()."</td>"."<td><span style=&#39;color:#666666&#39;>页</span></td>"."<td width=72 align=right>".$this->first_page()."</td>"."<td width=72 align=right>".$this->pre_page()."</td>"."<td width=72 align=right>".$this->next_page()."</td>"."<td width=72 align=right>".$this->last_page()."</td>"; 
return "<td align=&#39;right&#39;>共有[".$this->total."]条信息    ".$this->nowindex."/".$this->totalpage."页</td>"."<td width=145>".$this->pre_page()."  ".$this->next_page()."</td>"."<td width=145>".$this->last_page()."  ".$this->select()."  页  "; 
break; 
} 

} 
/*----------------private function (私有方法)-----------------------------------------------------------*/ 
/** 
* 设置url头地址 
* @param: String $url 
* @return boolean 
*/ 
function _set_url($url="") 
{ 
if(!empty($url)){ 
//手动设置 
$this->url=$url.((stristr($url,&#39;?&#39;))?&#39;&&#39;:&#39;?&#39;).$this->page_name."="; 
}else{ 
//自动获取 
if(empty($_SERVER[&#39;QUERY_STRING&#39;])){ 
//不存在QUERY_STRING时 
$this->url=$_SERVER[&#39;REQUEST_URI&#39;]."?".$this->page_name."="; 
}else{ 
// 
if(stristr($_SERVER[&#39;QUERY_STRING&#39;],$this->page_name.&#39;=&#39;)){ 
//地址存在页面参数 
$this->url=str_replace($this->page_name.&#39;=&#39;.$this->nowindex,&#39;&#39;,$_SERVER[&#39;REQUEST_URI&#39;]); 
$last=$this->url[strlen($this->url)-1]; 
if($last==&#39;?&#39;||$last==&#39;&&#39;){ 
$this->url.=$this->page_name."="; 
}else{ 
$this->url.=&#39;&&#39;.$this->page_name."="; 
} 
}else{ 
// 
$this->url=$_SERVER[&#39;REQUEST_URI&#39;].&#39;&&#39;.$this->page_name.&#39;=&#39;; 
}//end if 
}//end if 
}//end if 
} 

/** 
* 设置当前页面 
* 
*/ 
function _set_nowindex($nowindex) 
{ 
if(empty($nowindex)){ 
//系统获取 

if(isset($_GET[$this->page_name])){ 
$this->nowindex=intval($_GET[$this->page_name]); 
} 
}else{ 
//手动设置 
$this->nowindex=intval($nowindex); 
} 
} 

/** 
* 为指定的页面返回地址值 
* 
* @param int $pageno 
* @return string $url 
*/ 
function _get_url($pageno=1) 
{ 
return $this->url.$pageno; 
} 

/** 
* 获取分页显示文字,比如说默认情况下_get_text(&#39;<a href="">1</a>&#39;)将返回[<a href="">1</a>] 
* 
* @param String $str 
* @return string $url 
*/ 
function _get_text($str) 
{ 
return $this->format_left.$str.$this->format_right; 
} 

/** 
* 获取链接地址 
*/ 
function _get_link($url,$text,$style=&#39;&#39;){ 
$style=(empty($style))?&#39;&#39;:&#39;class="&#39;.$style.&#39;"&#39;; 
if($this->is_ajax){ 
//如果是使用AJAX模式 
return &#39;<a &#39;.$style.&#39; href="javascript:&#39;.$this->ajax_action_name.&#39;(\&#39;&#39;.$url.&#39;\&#39;)">&#39;.$text.&#39;</a>&#39;; 
}else{ 
return &#39;<a &#39;.$style.&#39; href="&#39;.$url.&#39;">&#39;.$text.&#39;</a>&#39;; 
} 
} 
/** 
* 出错处理方式 
*/ 
function error($function,$errormsg) 
{ 
die(&#39;Error in file <b>&#39;.FILE.&#39;</b> ,Function <b>&#39;.$function.&#39;()</b> :&#39;.$errormsg); 
} 
} 
?>
登入後複製

以上是php+ajax實作的分頁類別範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!