php中分页原与与分页类
所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSize)?
当前是第几页($CurrentPageID)?
现在只要再给我一个结果集,我就可以显示某段特定的结果出来.
至于其他的参数,比如:上一页($PReviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到.
以MySQL数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows.看看下面一组sql语句,尝试一下发现其中的规率.
……
这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:
select * from table limit ($CurrentPageID – 1) * $PageSize, $PageSize
拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事.搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了.以下我将用具体代码加以说明.
3、简单代码
请详细阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等.
实例代码如下:
<?php // 建立数据库连接 $link = mysql_connect([localhost], [mysql_user], [mysql_passWord]) or die ([Could not connect: ] . mysql_error()); // 获取当前页数 if ( isset( $_GET [ 'page' ]) ){ $page = intval ( $_GET [ 'page' ] ); } else { $page = 1; } // 每页数量 $PageSize = 10; // 获取总数据量 $sql = [select count (*) as amount from table]; $result = mysql_query( $sql ); $row = mysql_fetch_row( $result ); $amount = $row [ 'amount' ]; // 记算总共有多少页 if ( $amount ){ if ( $amount < $page_size ){ $page_count = 1; } //如果总数据量小于$PageSize,那么只有一页 if ( $amount % $page_size ){ //取总数据量除以每页数的余数 $page_count = (int)( $amount / $page_size ) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一 } else { $page_count = $amount / $page_size ; //如果没有余数,则页数等于总数据量除以每页数的结果 } } else { $page_count = 0; } // 翻页链接 $page_string = ]; if ( $page == 1 ){ $page_string .= ‘第一页|上一页|’; } else { $page_string .= ‘<a href=?page=1>第一页</a>|<a href=?page=’.( $page -1).’>上一页</a>|’; } if ( ( $page == $page_count ) || ( $page_count == 0) ){ $page_string .= ‘下一页|尾页’; } else { $page_string .= ‘<a href=?page=’.( $page +1).’>下一页</a>|<a href=?page=’. $page_count .’>尾页</a>’; } // 获取数据,以二维数组格式返回结果 if ( $amount ){ $sql = [select * from table order by id desc limit [. ( $page -1)* $page_size .], $page_size ]; $result = mysql_query( $sql ); while ( $row = mysql_fetch_row( $result ) ){ $rowset [] = $row ; } } else { $rowset = array (); } // 没有包含显示结果的代码,那不在讨论范围,只要用foreach就可以很简单的用得到的二维数组来显示结果 ?>PHP分页器制作,自动生成分面页码,JS调用函数
实例代码如下:
<?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 ; } } ?> <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>PHP调用实例代码如下:
$pageNo = $_GET [ 'pageNo' ]; if ( empty empty ( $pageNo )){ } //分页数据 $pageData = News::getNewsPage( $pageNo , $pageSize ); //取得总行数 $count = News::getNewsCount(); //创建分页器 $p = new PageView( $count [ '0' ][ 'TOTAL' ], $pageSize , $pageNo , $pageData ); //生成页码 $pageViewString = $p ->echoPageAsDiv();查看更多关于php中分页原与与分页类 - php分页的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did27935