Home  >  Article  >  Backend Development  >  PHP paging ideas and use in ZF_PHP tutorial

PHP paging ideas and use in ZF_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:18:45936browse

Only two variables are needed to get half the success:
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 get the total How many pages are there $pageCount
and then through a for loop, for example, if there are 13 pages in total, then it is easy to output the number of pages through the for loop

Copy code The code is as follows:

$nav='';//A variable used to save the number of pages
for ($i=1;$i<=13;$i++)
{
 $nav.="Page ".$i." ";
}

The above for loop will output the following:
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
What if we only want to display ten pages at a time? For example, pages 1-10 and 11-20
are very simple. You only need to slightly modify the for loop to achieve
Copy the code The code is as follows:

$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 and 20, then $step= 10
If the current page $pageNow is between 21 and 30, then $step=20
Referring to the code of the specific implementation process, we can easily find that the second condition of the for loop only needs to add 10 Then we can realize that only 10 pages are displayed at a time. We divide this step into the getLink() method in the fenyePage class
Then again, how can we get the values ​​​​of the two variables $pageSize and $rowCount? Woolen cloth?
$pageSize can be specified by the programmer himself, $rowCount can be obtained by using a simple function that executes sql statements
Copy code The code is as follows:

/**
* $sql statement: ① Get data ② Get total number of records
*/
class fenyePage{
public $pageSize=5;//The number displayed per page-->
public $rowCount;//This is obtained from the database (in the form of SELECT COUNT(id) FROM TABLE) specified by the programmer and used to save the total number of records
public $pageNow;//Through $ _GET['page'] obtained, used to save the current page number
public $pageCount;//Calculated, used to save the total number of pages
public $res_arr;//Used to save to be displayed Data to the page (such as saving the data retrieved by SELECT * FROM TABLE LIMIT 0,10)
public $nav;//Display the navigation bar of which page and 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 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.=" > ;> ";//Turn backward every 10 pages as a whole
}
$this->nav.="/Total ".$this->pageCount."pages";
}
}
?>

Since the task of operating the database in zf is completed by the model layer, I put 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 to be displayed on the page The information 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 Complete the following actions:
①The information to be displayed on the page
②How many records are there in the table
Copy the code The code is as follows:

/**
* Based on the specified user id, query the user’s historical ordering records
*
* @author Xiaofei 2012/5/30
* @param $id user id
* @param $fenye is an object instantiated to handle paging
* @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 to the $res_arr attribute of the paging class Among them, it is convenient to call
$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;
}

This is it, The paging function has been implemented
Original article: WEB development_Xiao Fei

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/325428.htmlTechArticleYou only need to get two variables to achieve half the success: The number of records to be displayed on each page $pageSize The total in the table Data volume $rowCount With the above two variables, we can find out how many pages there are...
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