page.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace common\components;
  3. /**
  4. * @author 高洛峰
  5. * @modify sofashi
  6. */
  7. class page {
  8. public $total; //数据表中总记录数
  9. public $listRows; //每页显示行数
  10. public $limit; //SQL语句使用limit从名
  11. public $uri; //url地址
  12. public $pageNum; //页数
  13. public $config =array("prev"=>'上页', "next"=>'下页', "first"=>'<i class="fa-angle-double-left"></i>', "last"=>'<i class="fa-angle-double-right"></i>');//在分页信息中显示内容,可以自己设置
  14. public $listNum =10; //默认分页列表显示的个数
  15. /**
  16. * 构造方法,可以设置分页类的属性
  17. * @param int $total 计算分页的总记录数
  18. * * @param int $page 第几页
  19. * @param int $listRows 可选的,默认每页需要显示的记录数
  20. * @param string $pa 可选的,为向目标页面传递参数
  21. */
  22. public function __construct($total,$page, $listRows=25, $pa=""){
  23. $this->total = $total;
  24. $this->listRows = $listRows;
  25. $this->uri = $this->getUri($pa);
  26. $page = !empty($page) ? $page : 1;
  27. if($total > 0) {
  28. if(preg_match('/\D/', $page) ){
  29. $this->page = 1;
  30. }else{
  31. $this->page = $page;
  32. }
  33. }else{
  34. $this->page = 0;
  35. }
  36. $this->pageNum = ceil($this->total/$this->listRows);
  37. $this->limit = $this->setLimit();
  38. }
  39. /**
  40. * 用于设置显示分页的信息,可以连贯操作
  41. * @param string $param 是数组config的下标
  42. * @param string $value 用于设置config下标对应的元素值
  43. * @return object 返回本对象自己$this
  44. */
  45. function set($param, $value){
  46. if(array_key_exists($param, $this->config)){
  47. $this->config[$param]=$value;
  48. }
  49. return $this;
  50. }
  51. public function setLimit(){
  52. if($this->page > 0)
  53. return ($this->page-1)*$this->listRows.", {$this->listRows}";
  54. else
  55. return 0;
  56. }
  57. public function getUri($param){
  58. $url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], "?") ? "" : "?") . $param;
  59. $parse = parse_url($url);
  60. if (isset($parse["query"])) {
  61. parse_str($parse["query"], $params);
  62. unset($params["page"]);
  63. $url = $parse["path"] . "?" . http_build_query($params);
  64. return $url;
  65. } else {
  66. return $url;
  67. }
  68. }
  69. public function __get($args){
  70. if($args=="limit")
  71. return $this->limit;
  72. else
  73. return null;
  74. }
  75. public function start(){
  76. if($this->total==0)
  77. return 0;
  78. else
  79. return ($this->page-1)*$this->listRows+1;
  80. }
  81. public function end(){
  82. return min($this->page*$this->listRows,$this->total);
  83. }
  84. public function firstprev(){
  85. if($this->page > 1) {
  86. $str ="<li><a href='{$this->uri}page=1'>{$this->config["first"]}</a></li>";
  87. $str .="<li><a href='{$this->uri}page=".($this->page-1)."'>{$this->config["prev"]}</a></li>";
  88. return $str;
  89. }else{
  90. $str ="<li class='disabled'><a href='javascript:void(0)'>{$this->config["first"]}</a></li>";
  91. $str .="<li class='disabled'><a href='javascript:void(0)'>{$this->config["prev"]}</a></li>";
  92. return $str;
  93. }
  94. }
  95. public function pageList(){
  96. $linkPage = "";
  97. $inum = 2;
  98. for($i=$inum; $i>=1; $i--){
  99. $page = $this->page-$i;
  100. if($page>=1)
  101. $linkPage .="<li><a href='{$this->uri}&page={$page}'>{$page}</a></li>";
  102. }
  103. if($this->pageNum > 1)
  104. $linkPage .='<li class="active"><a href="javascript:void(0)">'.$this->page.'</a></li>';
  105. for($i=1; $i<=$inum; $i++){
  106. $page = $this->page+$i;
  107. if($page<=$this->pageNum)
  108. $linkPage .= "<li><a href='{$this->uri}&page={$page}'>{$page}</a></li>";
  109. else
  110. break;
  111. }
  112. return $linkPage;
  113. }
  114. public function nextlast(){
  115. if($this->page != $this->pageNum) {
  116. $str ="<li><a href='{$this->uri}page=".($this->page+1)."'>{$this->config["next"]}</a></li>";
  117. $str .="<li><a href='{$this->uri}page=".($this->pageNum)."'>{$this->config["last"]}</a></li>";
  118. return $str;
  119. }else{
  120. $str ="<li class='disabled'><a href='javascript:void(0)'>{$this->config["next"]}</a></li>";
  121. $str .="<li class='disabled'><a href='javascript:void(0)'>{$this->config["last"]}</a></li>";
  122. return $str;
  123. }
  124. }
  125. /**
  126. * 按指定的格式输出分页
  127. */
  128. function fpage(){
  129. if($this->total <= $this->listRows){
  130. return;
  131. }
  132. $fpage = '<ul class="pagination">';
  133. $fpage .= $this->firstprev();
  134. $fpage .= $this->pageList();
  135. $fpage .= $this->nextlast();
  136. $fpage .= '</ul>';
  137. return $fpage;
  138. }
  139. }