Home  >  Article  >  Backend Development  >  PHP paging code example and its use in ZF

PHP paging code example and its use in ZF

WBOY
WBOYOriginal
2016-07-25 08:52:051177browse
  1. $nav='';//A variable used to save the number of pages
  2. for ($i=1;$i<=13;$i++)
  3. {
  4.  $nav.= "Page ".$i." ";
  5. }
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:

  1. $step= floor(($pageNow-1)/10)*10+1;
  2. for ($i=$step;$i<=$step+10;$i++ )
  3. {
  4.   $nav.="page ".$i." ";
  5. }
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.

  1. /**
  2. * $sql statement: ① Get data ② Get total number of records
  3. */
  4. class fenyePage{
  5. public $pageSize=5;//The number displayed per page-->specified by the programmer
  6. 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
  7. public $pageNow;//Acquired through $_GET['page'], used to save the current The page number
  8. public $pageCount;//Calculated, used to save the total number of pages
  9. 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)
  10. public $nav;//Display the navigation bar of which page
  11. /**
  12. * Get the hyperlink of the current page
  13. *
  14. * @author Xiaofei 2012/5/30
  15. */
  16. public function getLink()
  17. {
  18. $this->nav='';
  19. $this ->pageCount=ceil(($this->rowCount/$this->pageSize));
  20. $step= floor(($this->pageNow-1)/10)*10+1;
  21. if ($this->pageNow>10)
  22. {
  23. $this->nav.=" << ; ";//Turn forward every 10 pages as a whole
  24. }
  25. if ($this->pageNow!=1)
  26. {
  27. $this->nav.=" Previous page ";
  28. }
  29. if ($this->pageNow!=1)
  30. {
  31. $this->nav.="Homepage ";
  32. }
  33. for ($start=$step;$start<$step +10 && $start<=$this->pageCount;$start++)
  34. {
  35. $this->nav.=" ".$start." ";
  36. }
  37. if ($this->pageNow!=$this->pageCount)
  38. {
  39. $this->nav.="Last page ";
  40. }
  41. if ($this->pageNow!=$this->pageCount)
  42. {
  43. $this->nav.=" Next page";
  44. }
  45. if ($this->pageCount>10 && $this->pageNow<$this->pageCount-8){
  46. $this->nav.=" >> ";//Turn backward every 10 pages as a whole
  47. }
  48. $this->nav.="/Total ".$this->pageCount."page";
  49. }
  50. }
  51. ?>
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?

  1. /**
  2. * According to the specified user id, query the historical ordering record of the user
  3. *
  4. * @author Xiaofei 2012/5/30
  5. * @param $id user id
  6. * @param $fenye An object instantiated for Processing paging
  7. * @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
  8. * @todo $sql2 statement "select count( id) from table" This sql statement is used to get the total data volume
  9. * @link http://bbs.it-home.org
  10. */
  11. public function showorder($id=null,$fenye=null)
  12. {
  13. $db = $this->getAdapter();
  14. $select=$db->select();
  15. $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'));
  16. if ($id!=null){
  17. $select->where('o. user_id=?',$id);
  18. }
  19. $select->join(array('d'=>'department'),'o.dep_id = d.id','d.dep_name');
  20. if($fenye!=null){
  21. $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize);
  22. }
  23. $sql1=$ select->__toString();
  24. //This sql statement is mainly used to calculate the total amount of data
  25. $sql2="SELECT COUNT(id) FROM `order`";
  26. $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
  27. $rowCount=$db->fetchAll($sql2);//Save the total amount of data in the table Go to the rowCount attribute of the paging class
  28. $fenye->rowCount=$rowCount[0]['COUNT(id)'];
  29. $fenye->getLink();
  30. return $fenye->res_arr
  31. }
Copy code


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