Home >Backend Development >PHP Tutorial >Detailed explanation of understanding PHP paging ideas_PHP tutorial

Detailed explanation of understanding PHP paging ideas_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 16:56:15964browse

Paging in php is relatively simple. We only need to understand a few variables, such as pagesize, count, and page. How many pages are there in total? What page is the current page? How many items should be displayed on the page? Record, we only need a formula to calculate it.

Only need to get two variables and half the battle is done:
The number of records to be displayed on each page $pageSize
The total amount of data in the table $rowCount
With the above two variables, we can figure out how many pages there are $pageCount
Then through a for loop, for example, if there are 13 pages in total, it is easy to output the number of pages through the for loop

The code is as follows Copy code
$nav='';//Used A variable that holds the number of pages
 代码如下 复制代码
$nav='';//用来保存页数的一个变量
for ($i=1;$i<=13;$i++)
{
  $nav.="第".$i."页 ";
}
for ($i=1;$i<=13;$i++)

{
​$nav.="Page ".$i." ";
}


The above for loop will output something like Page 1, Page 2, Page 3, Page 4, Page 5, Page 6, Page 7, Page 8, Page 9, Page 10, Page 11, Page 12, Page 13 Page
 代码如下 复制代码
$step= floor(($pageNow-1)/10)*10+1;
for ($i=$step;$i<=$step+10;$i++)
{
  $nav.="第".$i."页 ";
}
What if we only want to display ten pages at a time? For example, pages 1-10, pages 11-20 It's very simple, just slightly modify the for loop to achieve it
The code is as follows Copy code
$step= floor(($pageNow-1 )/10)*10+1; for ($i=$step;$i<=$step+10;$i++) <🎜> { <🎜> ​$nav.="Page ".$i." "; }

For example, if the current page $pageNow is between 1 and 10, then $step=0
If the current page $pageNow is between 11~20, then $step=10
If the current page $pageNow is between 21~30, then $step=20
Referring to the code of the specific implementation process, it is not difficult to find that the second condition of the for loop only needs to add 10 to achieve the situation of only displaying 10 each time. We will package this step in the getLink in the fenyePage class. () method
Then again, how can we get the values ​​of the $pageSize and $rowCount variables?
$pageSize can be specified by the programmer himself, and $rowCount can be obtained with the help of a simple function that executes sql statements

The code is as follows Copy code
代码如下 复制代码
/**
* $sql语句:①获取数据②获取总记录数
*/
class fenyePage{
public $pageSize=5;//每页显示的数量-->程序员指定的
public $rowCount;//这是从数据库中获取的(形如SELECT COUNT(id) FROM TABLE)用来保存总共有多少条记录
public $pageNow;//通过$_GET['page']获取的,用来保存当前所在的页码
public $pageCount;//计算得到的,用来保存总共有多少页
public $res_arr;//用来保存要显示到页面的数据(比如保存SELECT * FROM TABLE LIMIT 0,10 检索的数据)
public $nav;//显示第几页第几页的导航条
/**
* 取得当前页面的超链接
*
* @author 小飞 2012/5/30
*/
public function getLink()
{
$this->nav='';
$this->pageCount=ceil(($this->rowCount/$this->pageSize));
$step= floor(($this->pageNow-1)/10)*10+1;
if ($this->pageNow>10)
{
$this->nav.=" << ";//整体每10页向前翻
}
if ($this->pageNow!=1)
{
$this->nav.=" 上一页 ";
}
if ($this->pageNow!=1)
{
$this->nav.="首页 ";
}
for ($start=$step;$start<$step+10 && $start<=$this->pageCount;$start++)
{
$this->nav.="".$start." ";
}
if ($this->pageNow!=$this->pageCount)
{
$this->nav.="末页 ";
}
if ($this->pageNow!=$this->pageCount)
{
$this->nav.=" 下一页";
}
if ($this->pageCount>10 && $this->pageNow<$this->pageCount-8){
$this->nav.=" >> ";//整体每10页向后翻
}
$this->nav.="/共有".$this->pageCount."页";
}
}
?>
/** * $sql statement: ① Get data ② Get total number of records */ class fenyePage{ public $pageSize=5;//The number displayed on each page-->specified by the programmer public $rowCount;//This is obtained from the database (in the form of SELECT COUNT(id) FROM TABLE) and is used to save the total number of records public $pageNow;//obtained through $_GET['page'], used to save the current page number public $pageCount;//Calculated, used to save the total number of pages public $res_arr;//Used to save the data to be displayed on the page (such as saving the data retrieved by SELECT * FROM TABLE LIMIT 0,10) public $nav;//Display the navigation bar of which page /** * Get the hyperlink of the current page * * @author Xiaofei 2012/5/30 */ public function getLink() { $this->nav=''; $this->pageCount=ceil(($this->rowCount/$this->pageSize)); $step= floor(($this->pageNow-1)/10)*10+1; if ($this->pageNow>10) { $this->nav.=" << ";//Overall every 10 Turn the page forward } if ($this->pageNow!=1) { $this->nav.=" Previous page "; } if ($this->pageNow!=1) { $this->nav.="Homepage "; } for ($start=$step;$start<$step+10 && $start<=$this->pageCount;$start++) { $this->nav.="".$start." "; } if ($this->pageNow!=$this->pageCount) { $this->nav.="Last page "; } if ($this->pageNow!=$this->pageCount) { $this->nav.=" Next Page"; } if ($this->pageCount>10 && $this->pageNow<$this->pageCount-8){ $this->nav.=" >> ";//Overall every 10 Turn the page backward } $this->nav.="/total".$this->pageCount."page"; } } ?>

Since the task of operating the database in zf is completed by the model layer, I placed the function to obtain the value of $rowCount in the corresponding table model
For example: I operate the order table
Then when I want to display all order information, I get the value of $rowCount through the showorder() method in the order class, and pay it to the $rowCount attribute in the paging class
Similarly, the data information to be displayed on the page is also paid to the $res_arr attribute in the paging class
In this way, we can easily instantiate a paging class (fenyePage), and then pass it to the showorder() function through parameters, and the function will complete the following actions:
①Information to be displayed on the page
②How many records are there in the table

* @param $id userid * @param $fenye An object instantiated to handle paging
The code is as follows
 代码如下 复制代码
/**
* 根据指定的用户id,查询该用户的历史订餐记录
*
* @author 小飞 2012/5/30
* @param $id 用户id
* @param $fenye 实例化的一个对象,用来处理分页
* @todo $sql1语句 "select * from table where * limit 0,10" 该sql语句主要用来检索数据库中的数据,用以显示在view层
* @todo $sql2语句 "select count(id) from table" 该sql语句用来得出总的数据量
*/
public function showorder($id=null,$fenye=null)
{
$db = $this->getAdapter();
$select=$db->select();
$select->from(array('o' => 'order'),array('o.id','o.user_id','o.user_name','o.food_name','o.food_price','o.order_time','o.order_state'));
if ($id!=null){
$select->where('o.user_id=?',$id);
}
$select->join(array('d'=>'department'),'o.dep_id = d.id','d.dep_name');
if($fenye!=null){
$select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize);
}
$sql1=$select->__toString();
//该sql语句主要用来计算总的数据量
$sql2="SELECT COUNT(id) FROM `order`";
$fenye->res_arr=$db->fetchAll($sql1);//将要显示的数据存储到分页类的$res_arr属性当中,方便调用
$rowCount=$db->fetchAll($sql2);//将表中的总数据量保存到分页类的rowCount属性当中
$fenye->rowCount=$rowCount[0]['COUNT(id)'];
$fenye->getLink();
return $fenye->res_arr;
}
Copy code

/**
 代码如下 复制代码
$this->pageCount=ceil(($this->rowCount/$this->pageSize));
$step= floor(($this->pageNow-1)/10)*10+1;
* Based on the specified user ID, query the user’s historical ordering records

*

* @author Xiaofei 2012/5/30
* @todo $sql1 statement "select * from table where * limit 0,10" This sql statement is mainly used to retrieve data in the database and display it in the view layer * @todo $sql2 statement "select count(id) from table" This sql statement is used to get the total amount of data

*/

public function showorder($id=null,$fenye=null) $db = $this->getAdapter(); $select=$db->select(); $select->from(array('o' => 'order'),array('o.id','o.user_id','o.user_name','o.food_name','o.food_price ','o.order_time','o.order_state')); if ($id!=null){ $select->where('o.user_id=?',$id); } $select->join(array('d'=>'department'),'o.dep_id = d.id','d.dep_name'); if($fenye!=null){ $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize); } $sql1=$select->__toString();
//This sql statement is mainly used to calculate the total amount of data $sql2="SELECT COUNT(id) FROM `order`"; $fenye->res_arr=$db->fetchAll($sql1);//Store the data to be displayed in the $res_arr attribute of the paging class for easy calling
$rowCount=$db->fetchAll($sql2);//Save the total amount of data in the table to the rowCount attribute of the paging class
$fenye->rowCount=$rowCount[0]['COUNT(id)']; $fenye->getLink(); return $fenye->res_arr; } Summary of the core codes of paging
The code is as follows Copy code
$this->pageCount=ceil(( $this->rowCount/$this->pageSize)); $step= floor(($this->pageNow-1)/10)*10+1; Then there is select * from table where * limit 0,10 in sql, which is $select->limit($fenye->pageSize,($fenye->pageNow-1)*$ in this example fenye->pageSize); http://www.bkjia.com/PHPjc/631620.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/631620.htmlTechArticlePaging in php is relatively simple. We only need to understand a few points, such as pagesize, count ,page variables, how many pages in total, what page is it currently, how many records should be displayed on page,...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn