php+ajax로 구현된 페이징 클래스의 샘플 코드

怪我咯
풀어 주다: 2023-03-13 21:20:02
원래의
1126명이 탐색했습니다.

페이징 표시는 많은 양의 데이터를 탐색하고 표시하는 매우 일반적인 방법이며 웹 프로그래밍에서 가장 일반적으로 처리되는 이벤트 중 하나입니다. 웹 프로그래밍 베테랑들에게는 이런 코드를 작성하는 것이 숨 쉬는 것처럼 자연스러운 일이지만, 초보자들에게는 이 문제에 대해 헷갈리는 경우가 많기 때문에 이 문제를 자세히 설명하기 위해 이 글을 썼습니다.

1. 페이징 원리:
페이징 표시란 데이터베이스의 결과 집합을 인위적으로 표시할 섹션으로 나누는 것을 의미합니다. 여기에는 두 가지 초기 매개변수가 필요합니다.

페이지당 레코드 수($PageSize)는 무엇입니까?
현재 페이지($CurrentPageID)는 어떤 페이지인가요?

이제 다른 결과 세트를 제공하면 특정 결과를 표시할 수 있습니다.

이전 페이지($PReviousPageID), 다음 페이지($NextPageID), 총 페이지 수($numPages) 등과 같은 기타 매개변수는 모두 이전 항목을 기반으로 얻을 수 있습니다.

MySQL 데이터베이스를 예로 들면, 테이블의 특정 콘텐츠를 가로채고 싶다면 다음과 같은 SQL 문을 사용할 수 있습니다. 다음 SQL 문 세트를 살펴보고 규칙을 찾아보세요.

처음 10개 레코드: 테이블 제한 0,10에서 * 선택
11~20번째 레코드: 테이블 제한 10,10에서 * 선택
21~30번째 레코드: 테이블 제한 20,10에서 * 선택
……语 이 SQL 문 그룹은 실제로 $ PageSize = 10일 때 테이블의 각 페이지에 대한 SQL 문을 사용하여 다음과 같은 템플릿을 요약할 수 있습니다.
Select * from Table Limit ($ CurrentPageid -1) * $ PageSize $ PAGESIZE a 이 템플릿을 해당 값으로 가져오고 위의 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿