php 分頁類 擴充代碼_php執行個體

來源:互聯網
上載者:User
原來發表過一個脫離資料庫的分頁類,最近使用的時候發現有些時候搜尋的東西過於大的時候,採用url傳遞參數的方式,可能會有一定的影響或者叫已知的bug,這次做了一些擴充,同時相容了以前的模式,使用上面很簡單的,只需要多設定一個參數就可以了代碼如下:
複製代碼 代碼如下:
/**
* 功能: 分頁類,根據提供的資料總量和頁面大小
* 建立日期:Fri Apr 20 16:45:21 CST 2007
* 最後更新:
* 作者: sanshi
*/

class pagination
{
var $result = array();
var $pVar = "myp";//page參數分頁記數
var $urlParamStr = ""; //頁面的所有參數
var $sqlMoveNumber = 0; //資料的位移量
var $is_post = false;

public function pagination()
{

}
public function set($sum,$pageSize,$page="",$is_post = false)
{
$this->is_post = $is_post;
$this->pVar = defined('PAGE_BAR') ? PAGE_BAR : 'myp' ;
$url = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
//計算出總頁數
$curPage = $this->getCurPage();

$temp['sumPage'] = ceil($sum/$pageSize);
//修改了,頁碼超出的bug
if($curPage>$temp['sumPage']) $curPage=$temp['sumPage'];
$temp['curPage'] = $curPage;
$temp['nextPage'] = $temp['sumPage'] > $curPage ? ($curPage+1) : $temp['sumPage'];
$temp['upPage'] = $curPage >1 ? $curPage-1 :1;
$temp['endPage'] = $temp['sumPage'];
$this->urlParamStr = $this->_makeUrl($url);
$temp['urlPageStr'] = ($page=="") ? $this->_makeUrl($url) : $page.$this->urlParamStr;

$this->sqlMoveNumber = $curPage <2 ? 0 : ($curPage-1)*$pageSize;
$temp['sqlMoveNumber'] = $this->sqlMoveNumber;
$temp['rowNo'] = $sum;
$this->result = $temp;
return $this->result;
//print_r($temp);exit();
}
public function getSqlMove()
{
return $this->sqlMoveNumber;
}
public function getFooter()
{
$str= "共有 {$this->result['rowNo']} 條 result['urlPageStr']}{$this->result['upPage']}'";
if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['upPage']});' ";
$str .=" >上一頁 ";
$str .=" 當前 {$this->result['curPage']} 頁";
$str .=" 共有 {$this->result['sumPage']} 頁";
$str .=" result['urlPageStr']}{$this->result['nextPage']}'";
if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['nextPage']});' ";
$str .=" >下一頁";
return $str;
}
public function getJumpPage()
{
if($this->is_post)
{
$str = " 跳到第 \n"; }else{ $str = " 跳到第 \n";
}
for($i=1;$i<=$this->result['sumPage'];$i++)
{
$str .= ($i==$this->result['curPage']) ? "$i\n" : "$i\n";
}
$str.=" 頁";
//輸出form表單
if($this->is_post)
{
$str .="";
$str .="";
}
return $str;
}
public function getCurPage()
{
return isset($_GET[$this->pVar]) ? intval($_GET[$this->pVar]) : 1 ;
}
//分析出url的參數返回?後的參數,頁碼為空白 包括問號
private function _makeUrl($url)
{
$arrayUrl=parse_url($url);
if(isset($arrayUrl['query']))
{
$q=$arrayUrl['query'];
parse_str($q,$qParam);
//print_r($qParam);
if(array_key_exists($this->pVar,$qParam))
{
foreach ($qParam AS $k=>$v)
{
if($k !=$this->pVar) $temp[$k] = $v;
}
$temp[$this->pVar] = "";
if(function_exists("http_build_query"))
return '?'.http_build_query($temp);
else
return '?'.sanshi_http_build_query($temp);
}else {
return "?{$q}&{$this->pVar}=";
}
}else{
return "?{$this->pVar}=";
}

}
}
function sanshi_http_build_query($a,$b='',$c=0)
{
if (!is_array($a)) return false;
foreach ((array)$a as $k=>$v)
{
if ($c)
$k=$b."[".$k."]";
elseif (is_int($k))
$k=$b.$k;
if (is_array($v)||is_object($v))
{
$r[]=http_build_query($v,$k,1);
continue;
}
$r[]=$k."=".urlencode($v);
}
return implode("&",$r);
}
/*
//print_r($_SERVER);
$p = new pagination();
$p->set(10,2,'thi.php');
echo $p->getFooter();
echo $p->getJumpPage();
*/
?>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.