-
- $nav='';//A variable used to save the number of pages
- for ($i=1;$i<=13;$i++)
- {
- $nav.= "Page ".$i." ";
- }
Copy the code
for above The 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
What if we only want to display ten pages at a time? For example, pages 1-10, pages 11-20
Just modify the for loop slightly:
-
- $step= floor(($pageNow-1)/10)*10+1;
- for ($i=$step;$i<=$step+10;$i++ )
- {
- $nav.="page ".$i." ";
- }
Copy the code
For example, if the current page $pageNow is between 1~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, 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.
-
- /**
- * $sql statement: ① Get data ② Get total number of records
- */
- class fenyePage{
- public $pageSize=5;//The number displayed per page-->specified by the programmer
- public $rowCount; //This is obtained from the database (in the form of SELECT COUNT(id) FROM TABLE) and used to save the total number of records
- public $pageNow;//Acquired through $_GET['page'], used to save the current The 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 SELECT * FROM TABLE LIMIT 0,10 retrieved data)
- 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.=" << ; ";//Turn forward every 10 pages as a whole
- }
- 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."page";
- }
- }
- ?>
Copy code
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?
-
- /**
- * According to the specified user id, query the historical ordering record of the user
- *
- * @author Xiaofei 2012/5/30
- * @param $id user id
- * @param $fenye An object instantiated for Processing paging
- * @todo $sql1 statement "select * from table where * limit 0,10" This sql statement is mainly used to retrieve data in the database for display in the view layer
- * @todo $sql2 statement "select count( id) from table" This sql statement is used to get the total data volume
- * @link http://bbs.it-home.org
- */
- 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, which is convenient for calling
- $rowCount=$db->fetchAll($sql2);//Save the total amount of data in the table Go to the rowCount attribute of the paging class
- $fenye->rowCount=$rowCount[0]['COUNT(id)'];
- $fenye->getLink();
- return $fenye->res_arr
- }
Copy code
|