/**
* filename: ext_page.class.php
* @package:phpbean
* descrīption:超強分頁類,四種分頁模式,預設為類似baidu,google的分頁風格。
* 2.0增加功能:支援自訂風格,自訂樣式,同時支援PHP4和PHP5,
* example:
* 模式四種分頁模式:
require_once('../libs/ classes/page.class.php');
$page=new page(array('total'=>1000,'perpage'=>20));
echo 'mode:1 '. $page->show();
echo ' mode:2 '.$page->show(2);
echo ' mode:3 '.$ page->show(3);
echo ' mode:4 '.$page->show(4);
開啟AJAX:
$ajaxpage=new page(array( 'total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));
echo 'mode:1 '.$ajaxpage- >show();
採用繼承自訂分頁顯示模式。
編輯整理:腳本學堂 http://bbs.it-home.org
*/
class _page
{
/**
* 配置,公用
class _page
{
/**
* 私人
*
/
var $page_name="PB_page";//page標籤,用來控制url頁。例如說xxx.php?PB_page=2中的PB_page
var $next_page='>';//下一頁
var $pre_page=' var $first_page ='First';//首頁
var $last_page='Last';//尾頁
var $pre_bar=' var $next_bar='> >';//下一分頁條
var $format_left='[';
var $format_right=']';
var $is_ajax=false;//是否支援AJAX分頁模式
/**
* 建構子建構子
*
* @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'] , $array['ajax']...
*/
var $pagebarnum=10;//控制記錄條的數量。
var $totalpage=0;//總頁數
var $ajax_action_name='';//AJAX動作名稱
var $nowindex=1;//目前頁
var $url=" ";//url位址頭
var $offset=0;
/**
* 設定類別中指定變數名稱的值,如果改變量不屬於這個類,將throw一個exception
*
* @param string $var
* @param string $value
*/
function page($array)
{
if(is_array( $array)){
if(!array_key_exists('total',$array))$this->error(__FUNCTION__,'need a param of total');
$total=intval($array[' total']);
$perpage=(array_key_exists('perpage',$array))?intval($array['perpage']):10;
$nowindex=(array_key_exists('nowindex',$ array))?intval($array['nowindex']):'';
$url=(array_key_exists('url',$array))?$array['url']:'';
}else{
$total=$array;
$perpage=10;
$nowindex='';
$url='';
}
if((!is_int ($total))||($totalerror(__FUNCTION__,$total.' is not a positive integer!');
if((!is_int($perpage))|| ($perpageerror(__FUNCTION__,$perpage.' is not a positive integer!');
if(!empty($array['page_name']))$this-> set('page_name',$array['page_name']);//設定pagename
$this->_set_nowindex($nowindex);//設定目前頁面
$this->_set_url($url); //設定連結位址
$this->totalpage=ceil($total/$perpage);
$this->offset=($this->nowindex-1)*$perpage;
if( !empty($array['ajax']))$this->open_ajax($array['ajax']);//開啟AJAX模式
}
/***/
function set($var,$value)
{
if(in_array($var,get_object_vars($this)))
$this->$var=$value;
else {
$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='')
{
if($this->nowindex<$this->totalpage) {
return $this->_get_link($this->_get_url($this->nowindex 1),$this->next_page,$style);
}
return ''.$this->next_page.' ';
}
/**
* "이전 페이지"를 표시하는 코드 가져오기
*
* @param string $style
* @return string
*/
함수 pre_page($style='')
{
if($this->nowindex>1){
return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);
}
return ''.$this->pre_page.' ';
}
/**
* "홈 페이지"를 표시하는 코드 가져오기
*
* @return string
*/
function first_page($style='')
{
if($this->nowindex==1){
return ''.$this->first_page.' ';
}
return $this->_get_link($this->_get_url(1),$this->first_page,$style);
}
/**
* "마지막 페이지"를 표시하는 코드 가져오기
*
* @return string
*/
function last_page($style='')
{
if($this->nowindex==$this- >totalpage){
return ''.$this->last_page.' ';
}
return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);
}
function nowbar($style='',$nowindex_style='')
{
$plus=ceil($this->pagebarnum/2);
if($this->pagebarnum-$plus $this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage $this-> 지금색인);
$begin=$this->nowindex-$plus 1;
$begin=($begin>=1)?$begin:1;
$return='';
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(''.$i.' ');
}else{
break;
}
$return.="n";
}
unset($begin);
반환 $return;
}
/**
* 점프 버튼을 표시하는 코드 가져오기
*
* @return string
*/
function select()
{
$return=' ';
for($i=1;$i<=$this->totalpage;$i )
{
if($i==$this->nowindex){
$return .='<옵션 값="'.$i.'" 선택됨>'.$i.'';
}else{
$return.=''.$i.' ';
}
}
unset($i);
$return.='';
반환 $return;
}
/**
* mysql 문에서 제한에 필요한 값을 가져옵니다.
*
* @return string
*/
function offset()
{
return $this->offset;
}
/**
* 페이징 표시 스타일 제어(해당 스타일 추가 가능)
*
* @param int $mode
* @return string
*/
function show($mode=1)
{
스위치($mode)
{
case '1':
$this->next_page='下一页';
$this->pre_page='상일页';
return $this->pre_page().$this->nowbar().$this->next_page().'第'.$this->select().'页';
휴식;
사례 '2':
$this->next_page='下一页';
$this->pre_page='상일页';
$this->first_page='首页';
$this->last_page='尾页';
return $this->first_page().$this->pre_page().'[第'.$this->nowindex.'页]'.$this->next_page().$this ->last_page().'第'.$this->select().'页';
휴식;
사례 '3':
$this->next_page='下一页';
$this->pre_page='상일页';
$this->first_page='首页';
$this->last_page='尾页';
return $this->first_page().$this->pre_page().$this->next_page().$this->last_page();
휴식;
사례 '4':
$this->next_page='下一页';
$this->pre_page='상일页';
return $this->pre_page().$this->nowbar().$this->next_page();
휴식;
케이스 '5':
return $this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page().$this ->next_bar();
휴식;
케이스 '6':
return $this->select();
휴식;
케이스 '7':
return $this->nowbar();
휴식;
}
}
/*---프라이빗 함수(私유방법)------------ ---------------------*/
/**
* URL 헤더 주소 설정
* @param: String $url
* @return boolean
*/
function _set_url($url="")
{
if(!empty($url)){
//手动设置
$ this->url=$url.((stristr($url,'?'))?'&':'?').$this->page_name."=";
}else{
//自动获取
if(empty($_SERVER['QUERY_STRING'])){
//불存재QUERY_STRING时
$this->url=$ _SERVER['REQUEST_URI']."?".$this->page_name."=";
}else{
//
if(stristr($_SERVER['QUERY_STRING'],$this->page_name.'=')){
//지대면参数
$this->url=str_replace($this->page_name.'='.$this->nowindex,'',$_SERVER['REQUEST_URI']);
$last=$this->url[strlen($this->url)-1];
if($last=='?'||$last=='&'){
$this->url.=$this->page_name."=";
}else{
$this->url.='&'.$this->page_name."=";
}
}else{
//
$this->url=$_SERVER['REQUEST_URI'].'&'.$this->page_name.'=';
}//end if
}//end if
}//end if
}
/**
* 현재 페이지 설정
*
*/
function _set_nowindex($nowindex )
{
if(empty($nowindex)){
//系统获取
if(isset($_GET[$this->page_name])){
$this->nowindex=intval($_GET[$this->페이지_이름]);
}
if(isset($_POST['PB_Page_Select'])){
$this->nowindex=$_POST['PB_Page_Select'];
}
}else{
//수공축
$this->nowindex=intval($nowindex);
}
}
/**
* 지정된 페이지의 주소 값을 반환합니다.
*
* @param int $pageno
* @return string $url
*/
function _get_url($pageno=1)
{
return $this->url.$pageno ;
}
/**
* 페이지 매기기 표시 텍스트 가져오기. 예를 들어 기본적으로 _get_text('1 ')는 [1 를 반환합니다. ]
*
* @param String $str
* @return string $url
*/
function _get_text($str)
{
return $this->format_left.$str.$this-> 형식_오른쪽;
}
/**
* 링크 주소 받기
*/
function _get_link($url,$text,$style=''){
$style=(empty($style)) ?'':'class="'.$style.'"';
if($this->is_ajax){
//如果是使用AJAX模式
return ''.$text.' ';
}else{
return ''.$text.' ';
}
}
/**
* 오류 처리
*/
함수 오류($function,$errormsg)
{
die('파일 '.__FILE__에 오류가 있습니다.' ,Function '.$function.'() :'.$errormsg)
}
}
// 페이징 클래스 상속 및 데이터베이스 액세스 추가 Capability .
class Page 확장 _Page {
var $db; //db 연결 개체
var $_Sql_Query = '' //데이터베이스의 SQL 쿼리
var $_Total = 0; /쿼리 전체 레코드는
var $_Rst = array(); //쿼리된 레코드입니다.
/**
* 페이징 쿼리 라이브러리
*
* @param String $Sql 레코드 쿼리용 SQL 문
* @param int $pagenuber 페이지당 레코드 수
* @param int $ pagen 현재 페이지
* @param String $url 페이징 링크에서 가져온 매개변수 index.php?xx=b&bb=33
* @param String $pname 현재 페이지의 표시, 기본값은 index입니다. .php?xx=b&bb=33&page=2 특별한 요구사항이 있는 경우
$pname의 매개변수를 수정할 수 있습니다. 예: $pname='db_page', index.php?xx=b&bb=33&db_page= 2
* @return Mysql_Page
*/
함수 페이지($db, $ sql_query = '', $max_rows_per_page = 20, $current_page_number = 0, $url = '', $parameters = '', $pname = 'PB_page',$otc = '*') {
$this -> db = $db;
$pos_to = strlen($sql_query);
$pos_from = strpos($sql_query, 'from', 0)
$pos_group_by = strpos($sql_query, '그룹별' , $ pos_from)
if (($pos_group_by < $pos_to) && ($pos_group_by != false)) $pos_to = $pos_group_by $pos_having = strpos($sql_query, 'having', $pos_from ); if (($pos_having < $pos_to) && ($pos_having != false)) $pos_to = $pos_having $pos_order_by = strpos($sql_query, 'order by', $pos_from); if (($pos_order_by < $pos_to) && ($pos_order_by != false)) $pos_to = $pos_order_by; $reviews_count = $this -> ($otc) as total " . substr($sql_query, $pos_from, ($pos_to - $pos_from)));
$query_num_rows = $reviews_count[0]['total'];
$this -> ; _Total = $ query_num_rows;
$num_pages = ceil($query_num_rows / $max_rows_per_page)
if ($current_page_number > $num_pages) {
$current_page_number = $num_pages; $offset = ( $max_rows_per_page * ($current_page_number - 1));
if ($offset < 0) $offset = 0 if ($offset > 0) {
$offset = $ 오프셋 1; $this -> 데이터베이스
parent :: page(array('total' => $query_num_rows, 'perpage' => $max_rows_per_page, 'page_name' => $pname, 'url' => $url, 'parameters) ' => $ 매개변수));
}
/**
* 현재 페이지의 기록을 가져와서 배열을 반환합니다.
*/
function findByAll() {
return $this ->
/* *
* 페이징 정보 표시
*
* @param int $model
*/
function dispaly_links($model) {
$this -> show($model)
}
/**
* 레코드 수를 반환합니다.
*
* @return Int
*/
function getCount () {
return $this ->
}
/**
* 쿼리 결과 레코드 개수를 가져옵니다..
*
* @return Int
*/
function getRows() {
return count($this -> _Rst) ;
}
/**
* 쿼리 기능 실행
* 배열 계산
* 프라이빗 메소드
*/
function setData() {
$this -> $this -> _Sql_Query)
}
}
?>
코드 복사
>