二个php分页程序代码
PHP分页器制作,自动生成分面页码,JS调用函数,分页的原理大致如下,分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page).
有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page,也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录.
PHP实例代码如下:
<?php class PageView{ /**页码**/ public $pageNo = 1; /**页大小**/ public $pageSize = 20; /**共多少页**/ public $pageCount = 0; /**总记录数**/ public $totalNum = 0; /**偏移量,当前页起始行**/ public $offSet = 0; /**每页数据**/ public $pageData = array (); /**是否有上一页**/ public $hasPrePage = true; /**是否有下一页**/ public $hasNextPage = true; public $pageNoList = array (); public $jsFunction = 'jsFunction' ; /** * * @param unknown_type $count 总行数 * @param unknown_type $size 分页大小 * @param unknown_type $string */ public function __construct( $count =0, $size =20, $pageNo =1, $pageData = array (), $jsFunction = 'jsFunction' ){ $this ->totalNum = $count ; //总记录数 $this ->pageSize = $size ; //每页大小 $this ->pageNo = $pageNo ; //计算总页数 $this ->pageCount = ceil ( $this ->totalNum/ $this ->pageSize); $this ->pageCount = ( $this ->pageCount<=0)?1: $this ->pageCount; //检查pageNo $this ->pageNo = $this ->pageNo == 0 ? 1 : $this ->pageNo; $this ->pageNo = $this ->pageNo > $this ->pageCount? $this ->pageCount : $this ->pageNo; //计算偏移 $this ->offset = ( $this ->pageNo - 1 ) * $this ->pageSize; //计算是否有上一页下一页 $this ->hasPrePage = $this ->pageNo == 1 ?false:true; $this ->hasNextPage = $this ->pageNo >= $this ->pageCount ?false:true; $this ->pageData = $pageData ; $this ->jsFunction = $jsFunction ; } /** * 分页算法 * @return */ private function generatePageList(){ $pageList = array (); if ( $this ->pageCount <= 9){ for ( $i =0; $i < $this ->pageCount; $i ++){ array_push ( $pageList , $i +1); } } else { if ( $this ->pageNo <= 4){ for ( $i =0; $i <5; $i ++){ array_push ( $pageList , $i +1); } array_push ( $pageList ,-1); array_push ( $pageList , $this ->pageCount); } else if ( $this ->pageNo > $this ->pageCount - 4){ array_push ( $pageList ,1); array_push ( $pageList ,-1); for ( $i =5; $i >0; $i --){ array_push ( $pageList , $this ->pageCount - $i +1); } } else if ( $this ->pageNo > 4 && $this ->pageNo <= $this ->pageCount - 4){ array_push ( $pageList ,1); array_push ( $pageList ,-1); array_push ( $pageList , $this ->pageNo -2); array_push ( $pageList , $this ->pageNo -1); array_push ( $pageList , $this ->pageNo); array_push ( $pageList , $this ->pageNo + 1); array_push ( $pageList , $this ->pageNo + 2); array_push ( $pageList ,-1); array_push ( $pageList , $this ->pageCount); } } return $pageList ; } /*** * 创建分页控件 * @param * @return String */ public function echoPageAsDiv(){ $pageList = $this ->generatePageList(); $pageString = "<div class='pagination'><div class='page-bottom'>" ; if (! empty empty ( $pageList )){ if ( $this ->pageCount >1){ if ( $this ->hasPrePage){ $pageString = $pageString . "<a class='page-next' href=" javascript: " .$this->jsFunction . " ( " . ($this->pageNo-1) . " ) ">上一页</a>" ; } foreach ( $pageList as $k => $p ){ if ( $this ->pageNo == $p ){ $pageString = $pageString . "<span class='page-cur'>" . $this ->pageNo . "</span>" ; continue ; } if ( $p == -1){ $pageString = $pageString . "<span class='page-break'>...</span>" ; continue ; } $pageString = $pageString . "<a href=" javascript: " .$this->jsFunction . " ( " . $p . " ) ">" . $p . "</a>" ; } if ( $this ->hasNextPage){ $pageString = $pageString . "<a class='page-next' href=" javascript: " .$this->jsFunction . " ( " . ($this->pageNo+1) . " ) ">下一页</a>" ; } } } $pageString = $pageString .( "</div></div>" ); return $pageString ; } } ?>css,代码如下:
<style type= "text/css" > <!-- .pagination { font-family : Tahoma ; overflow : hidden ; padding-top : 12px ; text-align : center ;} .pagination-tab { margin-bottom : 20px ;} .pagination a, .pagination .page-cur, .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g, .pagination .page-break, .pagination .page-skip { display : inline- block ; font-family : Tahoma ,SimSun, Arial ; height : 22px ; line-height : 22px ; margin : 0 ; min-width : 16px ; padding : 0 5px ; text-align : center ; vertical-align : top ; white-space : nowrap ;} .pagination a, .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g, .pagination .page-cur, .pagination .page-break { border : 1px solid #ed3d83 ; color : #e9357d ; font-weight : bold ;} .pagination a:hover { border : 1px solid #ed3d83 ; text-decoration : none ; background-color : #f95f9d ; color : #fff ;} .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g { width : 36px ; background-image : url ( static /img/page.gif);} .pagination .page-prev { background-position : -0px -38px ; padding-left : 16px ;} .pagination .page-prev_g { background-position : 0px -59px ; padding-left : 16px ; color : #cbcbcb ; font-weight : normal ;} .pagination .page-next { background-position : 0px 0px ; padding-right : 16px ; font-weight : normal ;} .pagination .page-next_g { background-position : -0px -19px ; padding-right : 16px ; color : #cbcbcb ;} .pagination .page-cur { background-color : #f95f9d ; border : 1px solid #ed3d83 ; color : #fff ; font-weight : bold ;} .pagination .page-break { border : medium none ; background : none transparent ; color : #333 ;} --> </style>使用方法,代码如下:
$pageNo = $_GET [ 'pageNo' ]; if ( empty empty ( $pageNo )){ $pageNo = 1; } //分页数据 $pageData = News::getNewsPage( $pageNo , $pageSize ); //取得总行数 $count = News::getNewsCount(); //创建分页器 $p = new PageView( $count [ '0' ][ 'TOTAL' ], $pageSize , $pageNo , $pageData ); //生成页码 $pageViewString = $p ->echoPageAsDiv();下面再介绍一个分页类,代码如下:
<?php class SubPages{ private $each_disNums ; //每页显示的条目数 private $nums ; //总条目数 private $current_page ; //当前被选中的页 private $sub_pages ; //每次显示的页数 private $pageNums ; //总页数 private $page_array = array (); //用来构造分页的数组 private $subPage_link ; //每个分页的链接 private $subPage_type ; //显示分页的类型 /* __construct是SubPages的构造函数,用来在创建类的时候自动运行. @$each_disNums 每页显示的条目数 @nums 总条目数 @current_num 当前被选中的页 @sub_pages 每次显示的页数 @subPage_link 每个分页的链接 @subPage_type 显示分页的类型 当@subPage_type=1的时候为普通分页模式 example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页] 当@subPage_type=2的时候为经典分页样式 example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页] */ function __construct( $each_disNums , $nums , $current_page , $sub_pages , $subPage_link , $subPage_type ){ $this ->each_disNums= intval ( $each_disNums ); $this ->nums= intval ( $nums ); if (! $current_page ){ $this ->current_page=1; } else { $this ->current_page= intval ( $current_page ); } $this ->sub_pages= intval ( $sub_pages ); $this ->pageNums= ceil ( $nums / $each_disNums ); $this ->subPage_link= $subPage_link ; $this ->show_SubPages( $subPage_type ); //echo $this->pageNums."--".$this->sub_pages; } /* __destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。 */ function __destruct(){ unset( $each_disNums ); unset( $nums ); unset( $current_page ); unset( $sub_pages ); unset( $pageNums ); unset( $page_array ); unset( $subPage_link ); unset( $subPage_type ); } /* show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页 */ function show_SubPages( $subPage_type ){ if ( $subPage_type == 1){ $this ->subPageCss1(); } elseif ( $subPage_type == 2){ $this ->subPageCss2(); } } /* 用来给建立分页的数组初始化的函数。 */ function initArray(){ for ( $i =0; $i < $this ->sub_pages; $i ++){ $this ->page_array[ $i ]= $i ; } return $this ->page_array; } /* construct_num_Page该函数使用来构造显示的条目 即使:[1][2][3][4][5][6][7][8][9][10] */ function construct_num_Page(){ if ( $this ->pageNums < $this ->sub_pages){ $current_array = array (); for ( $i =0; $i < $this ->pageNums; $i ++){ $current_array [ $i ]= $i +1; } } else { $current_array = $this ->initArray(); if ( $this ->current_page <= 3){ for ( $i =0; $i < count ( $current_array ); $i ++){ $current_array [ $i ]= $i +1; } } elseif ( $this ->current_page <= $this ->pageNums && $this ->current_page > $this ->pageNums - $this ->sub_pages + 1 ){ for ( $i =0; $i < count ( $current_array ); $i ++){ $current_array [ $i ]=( $this ->pageNums)-( $this ->sub_pages)+1+ $i ; } } else { for ( $i =0; $i < count ( $current_array ); $i ++){ $current_array [ $i ]= $this ->current_page-2+ $i ; } } } return $current_array ; } /* 构造普通模式的分页 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页] */ function subPageCss1(){ $subPageCss1Str = "" ; $subPageCss1Str .= "共" . $this ->nums. "条记录," ; $subPageCss1Str .= "每页显示" . $this ->each_disNums. "条," ; $subPageCss1Str .= "当前第" . $this ->current_page. "/" . $this ->pageNums. "页 " ; if ( $this ->current_page > 1){ $firstPageUrl = $this ->subPage_link. "1" ; $prewPageUrl = $this ->subPage_link.( $this ->current_page-1); $subPageCss1Str .= "[<a href='$firstPageUrl'>首页</a>] " ; $subPageCss1Str .= "[<a href='$prewPageUrl'>上一页</a>] " ; } else { $subPageCss1Str .= "[首页] " ; $subPageCss1Str .= "[上一页] " ; } if ( $this ->current_page < $this ->pageNums){ $lastPageUrl = $this ->subPage_link. $this ->pageNums; $nextPageUrl = $this ->subPage_link.( $this ->current_page+1); $subPageCss1Str .= " [<a href='$nextPageUrl'>下一页</a>] " ; $subPageCss1Str .= "[<a href='$lastPageUrl'>尾页</a>] " ; } else { $subPageCss1Str .= "[下一页] " ; $subPageCss1Str .= "[尾页] " ; } echo $subPageCss1Str ; } /* 构造经典模式的分页 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页] */ function subPageCss2(){ $subPageCss2Str = "" ; $subPageCss2Str .= "当前第" . $this ->current_page. "/" . $this ->pageNums. "页 " ; if ( $this ->current_page > 1){ $firstPageUrl = $this ->subPage_link. "1" ; $prewPageUrl = $this ->subPage_link.( $this ->current_page-1); $subPageCss2Str .= "[<a href='$firstPageUrl'>首页</a>] " ; $subPageCss2Str .= "[<a href='$prewPageUrl'>上一页</a>] " ; } else { $subPageCss2Str .= "[首页] " ; $subPageCss2Str .= "[上一页] " ; } $a = $this ->construct_num_Page(); for ( $i =0; $i < count ( $a ); $i ++){ $s = $a [ $i ]; if ( $s == $this ->current_page ){ $subPageCss2Str .= "[<span style='color:red;font-weight:bold;'>" . $s . "</span>]" ; } else { $url = $this ->subPage_link. $s ; $subPageCss2Str .= "[<a href='$url'>" . $s . "</a>]" ; } } if ( $this ->current_page < $this ->pageNums){ $lastPageUrl = $this ->subPage_link. $this ->pageNums; $nextPageUrl = $this ->subPage_link.( $this ->current_page+1); $subPageCss2Str .= " [<a href='$nextPageUrl'>下一页</a>] " ; $subPageCss2Str .= "[<a href='$lastPageUrl'>尾页</a>] " ; } else { $subPageCss2Str .= "[下一页] " ; $subPageCss2Str .= "[尾页] " ; } echo $subPageCss2Str ; } } ?>调用方法,代码如下:
<?php require_once ( "SubPages.php" ); //每页显示的条数 $page_size =20; //总条目数 $nums =1024; //每次显示的页数 $sub_pages =10; //得到当前是第几页 $pageCurrent = $_GET [ "p" ]; //if(!$pageCurrent) $pageCurrent=1; $subPages = new SubPages( $page_size , $nums , $pageCurrent , $sub_pages , "test.php?p=" ,2); ?>查看更多关于二个php分页程序代码 - php分页的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did27930