"上一页", "next" => "下一页", "first" => "首 页", "last" => "尾 页"); private $uri; private $listNum = 8; /** * PaginateHelper constructor. * @param $total int 总记录数 * @param int $listRows 每页显示行数 * @param null $currentPage 当前页码 * @param string $query_string 追加get参数 */ public function __construct($total, $listRows = 10, $currentPage = null, $query_string = "") { $this->total = $total;//总记录数 $this->listRows = $listRows;//每页记录数 $this->pageNum = ceil($this->total / $this->listRows);//计算总页数 $this->uri = $this->getUri($query_string); $this->setPage($currentPage); } /** * 获取sql的limit语句 * @return string */ public function getLimitStr() { return "Limit " . ($this->page - 1) * $this->listRows . ", {$this->listRows}"; } private function setPage($currentPage = null) { $page = $currentPage ?: ($_GET["page"]??1); $page = intval($page); $this->page = $page > 0 ? ($page > $this->pageNum ? $this->pageNum : $page) : 1;//当前页码 } /** * 获取当前uri * @param $query_string * @return string */ public function getUri($query_string) { $url = $_SERVER["REQUEST_URI"] . (strpos($_SERVER["REQUEST_URI"], '?') ? '' : "?") . $query_string; $parse = parse_url($url); if (isset($parse["query"])) { parse_str($parse['query'], $params); unset($params["page"]);//去除page参数 $url = $parse['path'] . '?' . http_build_query($params); } return $url; } /** * 当前页的起始位置 * @return int */ public function start() { if ($this->total == 0) return 0; else return ($this->page - 1) * $this->listRows + 1;//记录从1开始 } /** * 当前页的结束位置 * @return mixed */ public function end() { return min($this->page * $this->listRows, $this->total); } //首页 private function first() { $html = ""; if ($this->page == 1) $html .= ''; else $html .= "  {$this->config["first"]}  "; return $html; } //上一页 private function prev() { $html = ""; if ($this->page == 1) $html .= ''; else $html .= "  {$this->config["prev"]}  "; return $html; } private function pageList() { $linkPage = ""; $inum = floor($this->listNum / 2); for ($i = $inum; $i >= 1; $i--) { $page = $this->page - $i; if ($page < 1) continue; $linkPage .= " {$page} "; } $linkPage .= " {$this->page} "; for ($i = 1; $i <= $inum; $i++) { $page = $this->page + $i; if ($page <= $this->pageNum) $linkPage .= " {$page} "; else break; } return $linkPage; } //下一页 private function next() { $html = ""; if ($this->page >= $this->pageNum) $html .= ''; else $html .= "  {$this->config["next"]}  "; return $html; } //尾页 private function last() { $html = ""; if ($this->page == $this->pageNum) $html .= ''; else $html .= "  {$this->config["last"]}  "; return $html; } //跳到第几页 private function goPage() { return '    '; } //显示分页 public function fpage($display = array(0, 1, 2, 3, 4, 5, 6, 7, 8)) { $html[0] = "  共有{$this->total}个记录  "; $html[1] = "  每页显示{$this->listRows}条,本页{$this->start()}~{$this->end()}条  "; $html[2] = "  {$this->page}/{$this->pageNum}页  "; $html[3] = $this->first(); $html[4] = $this->prev(); $html[5] = $this->pageList(); $html[6] = $this->next(); $html[7] = $this->last(); $html[8] = $this->goPage(); $fpage = ''; foreach ($display as $index) { $fpage .= $html[$index]; } return $fpage; } }