DJ.
新手上路

UID 129870
精华
0
积分 42
帖子 38
金钱 42 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2008-6-24
状态 离线
|
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
分页,一个函数足矣
有点累,暂时先不说太多
<?php /* 函数: doPage 作者: DJ <[email]DJ@Bluessoft.com[/email]> 作用:通过记录总数,每页显示数取得offset,总页数,前一页与后一页以及分页纯数字的页数数组,不带任何链接 返回值: 数组 $aPDatas['offset'] offset $aPDatas['t'] 当前页 $aPDatas['m'] 总页数 $aPDatas['p'] 上一页 $aPDatas['n'] 下一页 $aPDatas['bar'] 分页数组 $aPDatas['pg'] 上一组页码 $aPDatas['ng'] 下一组页码 $aPDatas['qs'] QUERY_STRING
参数说明: $intTotal 记录总数 $intCol 每页显示数
以下几个参数,请根本实际使用习惯把你最常用的相关值设为默认,这样平时只使用上面两个参数就够了 $intNum 分页数组数量,当为'all'时,显示全部。根据你的习惯,把默认值修改。 $strVar 分页变量名,在地址档中如abc.php?page=123,即是page,默认是'page' $bGetQS 是否读取Query String, 默认读取 $bEncodeQS 是否对Query String使用htmlspecialchars,默认使用 $intPos 当前页所在分页数组中位置,根据你的习惯,把默认值修改。 */ function doPage( $intTotal , $intCol , $intNum = 10 , $intPos = 3 , $strVar = 'page' , $bGetQS = true , $bEncodeQS = true ) { $aPDatas = array( ) ; if ( isset( $_REQUEST[ $strVar ] ) ) { ( $intThisPage = $_REQUEST[ $strVar ] ) > 1 ? $aPDatas['t'] = $intThisPage : $aPDatas['t'] = $intThisPage = 1 ; } else { $aPDatas['t'] = $intThisPage = 1 ; }
if ( $intTotal < 1 || $intCol < 1 ) { $aPDatas['offset'] = 0 ; $aPDatas['t'] = $aPDatas['m'] = $aPDatas['p'] = $aPDatas['n'] = 1 ; } else { $aPDatas['offset'] = $intCol * ( $intThisPage - 1 ) ; $aPDatas['m'] = ceil ( $intTotal / $intCol ) ; $aPDatas['p'] = $intThisPage < 2 ? 1 : $intThisPage - 1 ; $aPDatas['n'] = $intThisPage == $aPDatas['m'] ? $aPDatas['m'] : $intThisPage + 1 ; }
$intNum = $intNum == 'all' ? $aPDatas['m'] : intval ( $intNum ) ;
if ( $intNum ) { $intSPage = ( $intSsPage = $intThisPage + 1 - $intPos ) < 1 ? 1 : $intSsPage ; if ( $intSPage + $intNum > $aPDatas['m'] ) $intSPage = abs( $aPDatas['m'] - $intNum ) + 1 ; $intEPage = ( $intEsPage = $intSPage + $intNum - 1 ) > $aPDatas['m'] ? $aPDatas['m'] : $intEsPage ; $aPDatas['pg'] = ( $intPGroup = $intThisPage - $intNum ) > 1 ? $intPGroup : 1 ; $aPDatas['ng'] = ( $intNGroup = $intThisPage + $intNum ) < $aPDatas['m'] ? $intNGroup : $aPDatas['m'] ; $arrPageBar = array ( ) ; for ( $i = $intSPage ; $i <= $intEPage ; $i++ ) { $arrPageBar[] = $i ; } $aPDatas['bar'] = $arrPageBar ; } if ( $bGetQS ) { $strPagepattern = '/('.$strVar.'=d{0,})/' ; preg_match_all( $strPagepattern, $_SERVER["QUERY_STRING"] , $arrResult ); if ( $arrResult[1] ) { $strQueryString = $arrResult[1][0] ? str_replace( "&".$arrResult[1][0] , "" , $_SERVER["QUERY_STRING"] ) : $_SERVER["QUERY_STRING"]; $strQueryString = str_replace( $arrResult[1][0] , "" , $strQueryString ) ; } else { $strQueryString = $_SERVER["QUERY_STRING"] ; } if ( $strQueryString ) { $strQueryString = $bEncodeQS ? htmlspecialchars($strQueryString) . '&' : $strQueryString . '&' ; } $aPDatas['qs'] = $strQueryString ; } return $aPDatas ; }
error_reporting(ALL) ;
//PHP程序使用例子 $intCount = 1000 ; // 用你的方法取得记录总数, 这里假设是1000 $intCol = 10 ; // 每页显示5个记录
//根据前面两个变量 就可以使用函数完成余下的工作了 $aPDatas = doPage ( $intCount , $intCol ) ;
$intOffset = $aPDatas['offset'] ;
print_r($aPDatas) ; ?>
|
|