设为首页 收藏本站
查看: 922|回复: 0

[经验分享] 记录一个我改装的php的分页类

[复制链接]

尚未签到

发表于 2017-4-10 06:02:55 | 显示全部楼层 |阅读模式
  原文来自超越php
  特点:
  1.包含显示函数
  2.没有调用其他任何库,但是需要连接参数的全局变量,具体就是2个地方有调用
  3.page参数错误会跳到index.php
  4.显示函数的输出格式还不支持模版,只是最简单的输出
  5.还有很多可以改进的地方,以后改好再做记录
  =======
  使用举例:
  $pageSize=20;

$pageOption = array(
"sql"=>$art->GetArticleBycateSql($cate),
"PageSize"=>$pageSize,
//"CurrentPageID"=>$currentPageId
);
$page = new Pager($pageOption);

$ret = $page->getDataLink();
$cateNews = array();
while($row=mysql_fetch_array($ret,MYSQL_ASSOC)){
$cateNews[]=$row;
}
  =======================
  类原文
  ======================
  <?php
  // 分页类,这个类仅仅用于处理数据结构,不负责处理显示的工作
Class Pager
{
var $PageSize; //每页的数量
var $CurrentPageID; //当前的页数
var $NextPageID; //下一页
var $PreviousPageID; //上一页
var $numPages; //总页数
var $numItems; //总记录数
var $isFirstPage; //是否第一页
var $isLastPage; //是否最后一页
var $sql; //sql查询语句
  function Pager($option)
{
global $DBHOST,$DBUSER,$DBPWD,$DBNAME;
  
$this->_setOptions($option);
  //当前页数
$this->CurrentPageID=$this->int_getCurrentPage('');
if($this->CurrentPageID==-1)
header('Location:index.php');



// 总条数
if ( !isset($this->numItems) )
{
$conn=mysql_connect($DBHOST,$DBUSER,$DBPWD);
mysql_query("set names 'utf8'",$conn);
$res= mysql_query($this->sql,$conn);
  $this->numItems = mysql_num_rows($res);
}
// 总页数
if ( $this->numItems > 0 )
{
if ( $this->numItems < $this->PageSize ){ $this->numPages = 1; }
if ( $this->numItems % $this->PageSize )
{
$this->numPages= (int)($this->numItems / $this->PageSize) + 1;
}
else
{
$this->numPages = $this->numItems / $this->PageSize;
}
}
else
{
$this->numPages = 0;
}

switch ( $this->CurrentPageID )
{
case $this->numPages == 1:
$this->isFirstPage = true;
$this->isLastPage = true;
break;
case 1:
$this->isFirstPage = true;
$this->isLastPage = false;
break;
case $this->numPages:
$this->isFirstPage = false;
$this->isLastPage = true;
break;
default:
$this->isFirstPage = false;
$this->isLastPage = false;
}

if ( $this->numPages > 1 )
{
if ( !$this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }
if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }
}

return true;
}
  
function _setOptions($option)
{
$allow_options = array(
'PageSize',
// 'CurrentPageID',
'sql',
'numItems'
);
  foreach ( $option as $key => $value )
{
if ( in_array($key, $allow_options) && ($value != null) )
{
$this->$key = $value;
}
}
  return true;
}
  
//获取当前页是第几页,如果参数不合法,返回-1
function int_getCurrentPage($strDetailUrl=''){
if($strDetailUrl==''){
$strDetailUrl='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//当页地址栏,含?后的请求项
}
  $currentPageId=1;
if(isset($_REQUEST['page'])){
$currentPageId=$_REQUEST['page'];
$currentPageId=trim($currentPageId);
  if(!preg_match('/^\d*$/',$currentPageId)){
return -1;}
else
return $currentPageId;
}
  return 1;
}
/***
*
* 返回结果集的数据库连接
* 在结果集比较大的时候可以直接使用这个方法获得数据库连接,然后在类之外遍历,这样开销较小
* 如果结果集不是很大,可以直接使用getPageData的方式获取二维数组格式的结果
* getPageData方法也是调用本方法来获取结果的
*
***/
  function getDataLink()
{
if ( $this->numItems )
{
global $DBHOST,$DBUSER,$DBPWD,$DBNAME;
  $PageID = $this->CurrentPageID;
  $from = ($PageID - 1)*$this->PageSize;
$count = $this->PageSize;
$conn=mysql_connect($DBHOST,$DBUSER,$DBPWD);
mysql_query("set names 'utf8'",$conn);
$limitSql = $this->sql . " Limit ".$from ." , ".$count;
  //echo $limitSql;
  $link= mysql_query($limitSql,$conn);
  
return $link;
}
else
{
return false;
}
}
  /***
*
* 以二维数组的格式返回结果集
*
***/
  function getPageData()
{
if ( $this->numItems )
{
if ( $res = $this->getDataLink() )
{
if ( $res->numRows() )
{
while ( $row = mysql_fetch_array($res,MYSQL_ASSOC) )
{
$result[] = $row;
}
}
else
{
$result = array();
}

return $result;
}
else
{
return false;
}
}
else
{
return false;
}
}
  //帮url换新的页
function strSsetUrlNewPage($strUrl,$intNewPage){
  $param1 = '/\&page=\d*/i';
$param2='/\?page=\d*/i';
  $strUrl = preg_replace($param1,'',$strUrl,1);
$strUrl = preg_replace($param2,'',$strUrl,1);
  
$det = '?';
if(strpos($strUrl,'?'))
$det='&';
return $strUrl . $det . 'page=' . $intNewPage;
}
  
//上一页
function str_show_getpPage($strDetailUrl=''){
if($strDetailUrl=='')
$strDetailUrl='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//当页地址栏,含?后的请求项
//echo $strDetailUrl;
$ret = "";
//上一页
$pPage='上一页';
if(!$this->isFirstPage){
$newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->PreviousPageID);
$ret .= '<a href='. $newUrl;
$ret .='>'.$pPage.'</a>';
}else{
$ret .= $pPage;
}
return $ret;
  }
  //下一页
function str_show_getnPage($strDetailUrl=''){
if($strDetailUrl=='')
$strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
$ret = "";
  $pPage='下一页';
if($this->isLastPage==false){
$newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->NextPageID);
  
$ret .= '<a href='. $newUrl;
$ret .='>'.$pPage.'</a>';
}else{
$ret .= $pPage;
}
return $ret;
}
  
//最后一页
function str_show_getLPage($strDetailUrl=''){
if($strDetailUrl=='')
$strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
$ret = "";
$pPage='最后一页';

if($this->isLastPage){
$ret .= $pPage;}
else{
$newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->numPages);
$ret .= '<a href='. $newUrl;
$ret .='>'.$pPage.'</a>';
}
  
return $ret;
  }
  //第一页
function str_show_getFPage($strDetailUrl=''){
if($strDetailUrl=='')
$strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
$ret = "";
$pPage='第一页';
if($this->isFirstPage)
$ret .= $pPage;
else{
$newUrl =$this->strSsetUrlNewPage($strDetailUrl,1);
$ret .= '<a href='. $newUrl;
$ret .='>'.$pPage.'</a>';
}

return $ret;


}
  //分页信息
function str_show_getPageInfo(){
$ret = "";
$ret .= "共" . $this->numPages . '页';
$ret .= '&nbsp;';
$ret .= '当前为' . $this->CurrentPageID . '页';
$ret .= '&nbsp;';
$ret .= '共' . $this->numItems .'条数据';
return $ret;
}
  //获取一般情况下的分页显示
function str_show_GetPageNav($strDetailUrl=''){
$ret = '';
$ret .= $this->str_show_getFPage($strDetailUrl);
$ret .= '&nbsp;';
$ret .= $this->str_show_getpPage($strDetailUrl);
$ret .= '&nbsp;';
$ret .= $this->str_show_getnPage($strDetailUrl);
$ret .= '&nbsp;';
$ret .= $this->str_show_getLPage($strDetailUrl);
$ret .= '&nbsp;';
$ret .= $this->str_show_getPageInfo();
return $ret;
}
  
}
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-362574-1-1.html 上篇帖子: PHP经典的给图片加水印程序 下篇帖子: 用PHP检测并去掉UTF-8中的BOM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表