跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

PHP中常用的分页类总结

分页是目前在显示大量结果时所采用的最好的方式。有了下面这些代码的帮助,开发人员可以在多个页面中显示大量的数据。在互联网上,分​页是一般用于搜索结果或是浏览全部信息php基本分页代码如下复制代码// database connection info$conn = mysql_connect('localhost','dbusername','dbpass') or trigger_error("SQL", E_USER_ERROR);$db = mysql_select_db('dbname',$conn) or trigger_error("SQL", E_USER_ERROR);// find out how many rows are in the table$sql = "SELECT COUNT(*) FROM numbers";$result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);$r = mysql_fetch_row($result);$numrows = $r[0];// number of rows to show per page$rowsperpage = 10;// find out total pages$totalpages = ceil($numrows / $rowsperpage);// get the current page or set a defaultif (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {// cast var as int$currentpage = (int) $_GET['currentpage'];} else {// default page num$currentpage = 1;} // end if立即学习“PHP免费学习笔记(深入)”;// if current page is greater than total pages...if ($currentpage > $totalpages) {// set current page to last page$currentpage = $totalpages;} // end if// if current page is less than first page...if ($currentpage // set current page to first page$currentpage = 1;} // end if// the offset of the list, based on current page$offset = ($currentpage - 1) * $rowsperpage;// get the info from the db$sql = "SELECT id, number FROM numbers LIMIT $offset, $rowsperpage";$result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);// while there are rows to be fetched...while ($list = mysql_fetch_assoc($result)) {// echo dataecho $list['id'] . " : " . $list['number'] . "";} // end while/****** build the pagination links ******/// range of num links to show$range = 3;// if not on page 1, don't show back linksif ($currentpage > 1) {// show echo "";// get previous page num$prevpage = $currentpage - 1;// show echo "";} // end if// loop to show links to range of pages around current pagefor ($x = ($currentpage - $range); $x // if it's a valid page number...if (($x > 0) && ($x // if we're on current page...if ($x == $currentpage) {// 'highlight' it but don't make a linkecho " [$x] ";// if not current page...} else {// make it a linkecho "$x";} // end else} // end if} // end for// if not on last page, show forward and last page linksif ($currentpage != $totalpages) {// get next page$nextpage = $currentpage + 1;// echo forward link for next pageecho ">";// echo forward link for lastpageecho ">>";} // end if/****** end build pagination links ******/?>先看一个常用的php分页类代码如下复制代码/*Place code to connect to your DB here.*/include('config.php'); // include your code to connect to DB.$tbl_name="";  //your table name// How many adjacent pages should be shown on each side?$adjacents = 3;/*First get total number of rows in data table.If you have a WHERE clause in your query, make sure you mirror it here.*/$query = "SELECT COUNT(*) as num FROM $tbl_name";$total_pages = mysql_fetch_array(mysql_query($query));$total_pages = $total_pages[num];/* Setup vars for query. */$targetpage = "filename.php";  //your file name  (the name of this file)$limit = 2;         //how many items to show per page$page = $_GET['page'];if($page)$start = ($page - 1) * $limit;    //first item to display on this pageelse$start = 0;        //if no page var is given, set start to 0/* Get data. */$sql = "SELECT column_name FROM $tbl_name LIMIT $start, $limit";$result = mysql_query($sql);/* Setup page vars for display. */if ($page == 0) $page = 1;     //if no page var is given, default to 1.$prev = $page - 1;       //previous page is page - 1$next = $page + 1;       //next page is page + 1$lastpage = ceil($total_pages/$limit);  //lastpage is = total pages / items per page, rounded up.$lpm1 = $lastpage - 1;      //last page minus 1/*Now we apply our rules and draw the pagination object.We're actually saving the code to a variable in case we want to draw it more than once.*/$pagination = "";if($lastpage > 1){$pagination .= "";//previous buttonif ($page > 1)$pagination.= "� previous";else$pagination.= "� previous";//pagesif ($lastpage   {for ($counter = 1; $counter    {if ($counter == $page)$pagination.= "$counter";else$pagination.= "$counter";}}elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some{//close to beginning; only hide later pagesif($page    {for ($counter = 1; $counter     {if ($counter == $page)$pagination.= "$counter";else$pagination.= "$counter";}$pagination.= "...";$pagination.= "$lpm1";$pagination.= "$lastpage";}//in middle; hide some front and some backelseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)){$pagination.= "1";$pagination.= "2";$pagination.= "...";for ($counter = $page - $adjacents; $counter     {if ($counter == $page)$pagination.= "$counter";else$pagination.= "$counter";}$pagination.= "...";$pagination.= "$lpm1";$pagination.= "$lastpage";}//close to end; only hide early pageselse{$pagination.= "1";$pagination.= "2";$pagination.= "...";for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter     {if ($counter == $page)$pagination.= "$counter";else$pagination.= "$counter";}}}//next buttonif ($page    $pagination.= "next �";else$pagination.= "next �";$pagination.= "n";}?>while($row = mysql_fetch_array($result)){// Your while loop here}?>=$pagination?>实例代码如下复制代码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->pageCountpageCount;//检查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             for($i=0;$ipageCount;$i++){array_push($pageList,$i+1);}}else{if($this->pageNo                 for($i=0;$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 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 ="";if(!empty($pageList)){if($this->pageCount >1){if($this->hasPrePage){$pageString = $pageString ."jsFunction . "(" . ($this->pageNo-1) . ")">上一页";}foreach ($pageList as $k=>$p){if($this->pageNo == $p){$pageString = $pageString ."" . $this->pageNo . "";continue;}if($p == -1){$pageString = $pageString ."...";continue;}$pageString = $pageString ."jsFunction . "(" . $p . ")">" . $p . "";}if($this->hasNextPage){$pageString = $pageString ."jsFunction . "(" . ($this->pageNo+1) . ")">下一页";}}}$pageString = $pageString .("");return $pageString;}}?>css代码代码如下复制代码-->在php页面中的调用方法代码如下复制代码$pageNo = $_GET['pageNo'];if(empty($pageNo)){$pageNo = 1;}//分页数据$pageData = News::getNewsPage($pageNo,$pageSize);//取得总行数$count = News::getNewsCount();//创建分页器$p = new PageView($count['0']['TOTAL'],$pageSize,$pageNo,$pageData);//生成页码$pageViewString = $p->echoPageAsDiv();

相关文章