Page.class.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. class Page {
  3. private $total; //数据表中总记录数
  4. private $listRows; //每页显示行数
  5. private $limit;
  6. private $uri;
  7. private $pageNum; //页数
  8. //public $html="";
  9. /* private $config=array('header'=>"Histórico", "prev"=>"Página anterior", "next"=>"Próxima pagina", "first"=>"Página inicial", "last"=>"Ultima pagina
  10. ");
  11. */
  12. private $config=array('header'=>"第", "prev"=>"上一页", "next"=>"下一页", "first"=>"第一页", "last"=>"最后页
  13. ");
  14. private $listNum=8; //显示几个快速的链接,详情请看成品效果。
  15. /*
  16. * $total
  17. * $listRows
  18. */
  19. public function __construct($total, $listRows=10, $pa=""){
  20. $this->total=$total;
  21. $this->listRows=$listRows;
  22. $this->uri=$this->getUri($pa);
  23. $this->page=!empty($_GET["page"]) ? $_GET["page"] : 1;
  24. $this->pageNum=ceil($this->total/$this->listRows);
  25. $this->limit=$this->setLimit();
  26. }
  27. private function setLimit(){ //构建一个limit语句段(sql查询中要用到)
  28. return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}";
  29. }
  30. private function getUri($pa){
  31. $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], '?')?'':"?").$pa;
  32. //echo $url; strpos() 函数返回字符串在另一个字符串中第一次出现的位置。
  33. $parse=parse_url($url); //parse_url -- 解析 URL,返回其组成部分
  34. if(isset($parse["query"])){
  35. parse_str($parse['query'],$params); //parse_str() 函数把查询字符串解析到变量中。把前者放到后者数组中
  36. unset($params["page"]); //把$params["page"]这个变量重置
  37. $url=$parse['path'].'?'.http_build_query($params);
  38. //http_build_query -- 生成 url-encoded 之后的请求字符串
  39. }
  40. return $url;
  41. }
  42. //private function __get($args){
  43. function __get($args){
  44. if($args=="limit")
  45. return $this->limit;
  46. else
  47. return null;
  48. }
  49. private function start(){
  50. if($this->total==0)
  51. return 0;
  52. else
  53. return ($this->page-1)*$this->listRows+1;
  54. }
  55. private function end(){
  56. return min($this->page*$this->listRows,$this->total);
  57. }
  58. private function first(){
  59. $html='';
  60. if($this->page==1)
  61. $html.='';
  62. else
  63. $html.="&nbsp;<a href='{$this->uri}&page=1#ly'>{$this->config["first"]}</a>&nbsp;";
  64. return $html;
  65. }
  66. private function prev(){
  67. $html='';
  68. if($this->page==1)
  69. $html.='';
  70. else
  71. $html.="&nbsp;<a href='{$this->uri}&page=".($this->page-1)."#ly'>{$this->config["prev"]}</a>&nbsp;";
  72. return $html;
  73. }
  74. private function pageList(){
  75. $linkPage="";
  76. $inum=floor($this->listNum/2);
  77. for($i=$inum; $i>=1; $i--){
  78. $page=$this->page-$i;
  79. if($page<1)
  80. continue;
  81. $linkPage.="&nbsp;<a href='{$this->uri}&page={$page}#ly'>{$page}</a>&nbsp;";
  82. }
  83. $linkPage.="&nbsp;{$this->page}&nbsp;";
  84. for($i=1; $i<=$inum; $i++){
  85. $page=$this->page+$i;
  86. if($page<=$this->pageNum)
  87. $linkPage.="&nbsp;<a href='{$this->uri}&page={$page}#ly'>{$page}</a>&nbsp;";
  88. else
  89. break;
  90. }
  91. return $linkPage;
  92. }
  93. private function next(){
  94. $html='';
  95. if($this->page==$this->pageNum)
  96. $html.='';
  97. else
  98. $html.="&nbsp;<a href='{$this->uri}&page=".($this->page+1)."#ly'>{$this->config["next"]}</a>&nbsp;";
  99. return $html;
  100. }
  101. private function last(){
  102. $html='';
  103. if($this->page==$this->pageNum)
  104. $html.='';
  105. else
  106. $html.="&nbsp;<a href='{$this->uri}&page=".($this->pageNum)."#ly'>{$this->config["last"]}</a>&nbsp;";
  107. return $html;
  108. }
  109. private function goPage(){
  110. return '&nbsp;<input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'&page=\'+page+\'#ly\'}" value="'.$this->page.'" style="width:35px"><input type="button" class="btn btn-default btn-sm" value="GO" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'&page=\'+page+\'#ly\'">';
  111. }
  112. public function fpage($display=array(0,1,2,3,4,5,6,7)){ //在这里修改$display可以影响里面的foreach函数的效果
  113. $html[0]="&nbsp;Total&nbsp;<b>{$this->total}</b>&nbsp;{$this->config["header"]}&nbsp;";
  114. //$html[1]="&nbsp;&nbsp;exibir&nbsp;<b>".($this->end()-$this->start()+1)."</b>&nbsp;em cada pagina,Esta páginas tem&nbsp;<b>{$this->start()}-{$this->end()}</b>&nbsp;&nbsp;";
  115. //$html[1]="&nbsp;<b>{$this->page}/{$this->pageNum}</b>&nbsp;Páginas&nbsp;";
  116. $html[1]="&nbsp;<b>{$this->page}/{$this->pageNum}</b>&nbsp;页&nbsp;";
  117. $html[2]=$this->first();
  118. $html[3]=$this->prev();
  119. $html[4]=$this->pageList();
  120. $html[5]=$this->next();
  121. $html[6]=$this->last();
  122. $html[7]=$this->goPage();
  123. $fpage='';
  124. foreach($display as $index){
  125. $fpage.=$html[$index];
  126. }
  127. return $fpage;
  128. }
  129. }