Page.class.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace My;
  3. /**
  4. * 分页驱动
  5. * @author Devil
  6. * @blog http://gong.gg/
  7. * @version 0.0.1
  8. * @datetime 2016-12-01T21:51:08+0800
  9. */
  10. class Page
  11. {
  12. private $page;
  13. private $total;
  14. private $number;
  15. private $bt_number;
  16. private $where;
  17. private $page_total;
  18. private $url;
  19. private $html;
  20. private $page_start_tag;
  21. /**
  22. * [__construct description]
  23. * @param [int] $param['total'] [数据总数]
  24. * @param [int] $param['number'] [每页数据条数]
  25. * @param [int] $param['bt_number'] [分页显示按钮个数]
  26. * @param [array] $param['where'] [额外条件(键值对)]
  27. * @param [string] $param['url'] [url地址]
  28. */
  29. public function __construct($param = array())
  30. {
  31. $this->page = max(1, isset($_REQUEST['page']) ? intval($_REQUEST['page']) : 1);
  32. $this->total = max(1, isset($param['total']) ? intval($param['total']) : 1);
  33. $this->number = max(1, isset($param['number']) ? intval($param['number']) : 1);
  34. $this->bt_number = isset($param['bt_number']) ? intval($param['bt_number']) : 2;
  35. $this->where = (isset($param['where']) && is_array($param['where'])) ? $param['where'] : '';
  36. $this->url = isset($param['url']) ? $param['url'] : '';
  37. $this->page_total = 1;
  38. $this->html = '';
  39. /* 参数设置 */
  40. $this->SetParem();
  41. }
  42. /**
  43. * [SetParem 参数设置]
  44. */
  45. private function SetParem()
  46. {
  47. /* 防止超出最大页码数 */
  48. $this->page_total = ceil($this->total/$this->number);
  49. if($this->page > $this->page_total) $this->page = $this->page_total;
  50. /* url是否包含问号 */
  51. $state = stripos($this->url, '?');
  52. /* 额外条件url设置 */
  53. if(!empty($this->where) && is_array($this->where))
  54. {
  55. $tmp = true;
  56. foreach($this->where as $k=>$v)
  57. {
  58. if($k == 'page') continue;
  59. if($tmp)
  60. {
  61. $this->url .= ($state === false) ? '?' : '&';
  62. $this->url .= $k.'='.$v;
  63. $tmp = false;
  64. } else {
  65. $this->url .= '&'.$k.'='.$v;
  66. }
  67. }
  68. $this->page_start_tag = ($tmp == false) ? '&' : (($state === false) ? '?' : '&');
  69. } else {
  70. $this->page_start_tag = ($state === false) ? '?' : '&';
  71. }
  72. }
  73. /**
  74. * [GetPageHtml 获取生成好的分页代码]
  75. */
  76. public function GetPageHtml()
  77. {
  78. $this->html .= '<ul class="am-pagination am-pagination-centered"><li';
  79. $this->html .= ($this->page > 1) ? '' : ' class="am-disabled"';
  80. $this->html .= '><a href="'.$this->url.$this->page_start_tag.'page='.($this->page-1).'" class="am-radius">&laquo;</a></li>';
  81. $this->html .= $this->GetButtonNumberHtml();
  82. $this->html .= '<li';
  83. $this->html .= ($this->page > 0 && $this->page < $this->page_total) ? '' : ' class="am-disabled"';
  84. $this->html .= '><a href="'.$this->url.$this->page_start_tag.'page='.($this->page+1).'" class="am-radius">&raquo;</a></li></ul>';
  85. return $this->html;
  86. }
  87. /**
  88. * [GetButtonNumberHtml 获取button显示个数的html]
  89. * @return [string] [按钮个数html代码]
  90. */
  91. private function GetButtonNumberHtml()
  92. {
  93. $html_before = '';
  94. $html_after = '';
  95. $html_page = '<li class="am-active"><a class="am-radius">'.$this->page.'</a></li>';
  96. if($this->bt_number > 0)
  97. {
  98. /* 前按钮 */
  99. if($this->page > 1)
  100. {
  101. $total = ($this->page-$this->bt_number < 1) ? 1 : $this->page-$this->bt_number;
  102. for($i=$this->page-1; $i>=$total; $i--)
  103. {
  104. $html_before = '<li><a href="'.$this->url.$this->page_start_tag.'page='.$i.'" class="am-radius">'.$i.'</a></li>'.$html_before;
  105. }
  106. }
  107. /* 后按钮 */
  108. if($this->page_total > $this->page)
  109. {
  110. $total = ($this->page+$this->bt_number > $this->page_total) ? $this->page_total : $this->page+$this->bt_number;
  111. for($i=$this->page+1; $i<=$total; $i++)
  112. {
  113. $html_after .= '<li><a href="'.$this->url.$this->page_start_tag.'page='.$i.'" class="am-radius">'.$i.'</a></li>';
  114. }
  115. }
  116. }
  117. return $html_before.$html_page.$html_after;
  118. }
  119. /**
  120. * [GetPageStarNumber 获取分页起始值]
  121. */
  122. public function GetPageStarNumber()
  123. {
  124. return intval(($this->page-1)*$this->number);
  125. }
  126. }
  127. ?>