123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2022/11/3
- * Time: 16:49
- */
- namespace paginate;
- class PaginateHelper
- {
- private $total; //数据表中总记录数
- private $listRows; //每页显示行数
- private $page; //当前页码
- private $pageNum; //总页数
- private $config = array("prev" => "上一页", "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 .= " <a href='{$this->uri}&page=1'>{$this->config["first"]}</a> ";
- return $html;
- }
- //上一页
- private function prev()
- {
- $html = "";
- if ($this->page == 1)
- $html .= '';
- else
- $html .= " <a href='{$this->uri}&page=" . ($this->page - 1) . "'>{$this->config["prev"]}</a> ";
- 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 .= " <a href='{$this->uri}&page={$page}'>{$page}</a> ";
- }
- $linkPage .= " {$this->page} ";
- for ($i = 1; $i <= $inum; $i++) {
- $page = $this->page + $i;
- if ($page <= $this->pageNum)
- $linkPage .= " <a href='{$this->uri}&page={$page}'>{$page}</a> ";
- else
- break;
- }
- return $linkPage;
- }
- //下一页
- private function next()
- {
- $html = "";
- if ($this->page >= $this->pageNum)
- $html .= '';
- else
- $html .= " <a href='{$this->uri}&page=" . ($this->page + 1) . "'>{$this->config["next"]}</a> ";
- return $html;
- }
- //尾页
- private function last()
- {
- $html = "";
- if ($this->page == $this->pageNum)
- $html .= '';
- else
- $html .= " <a href='{$this->uri}&page=" . ($this->pageNum) . "'>{$this->config["last"]}</a> ";
- return $html;
- }
- //跳到第几页
- private function goPage()
- {
- return ' <input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.value;location=\'' . $this->uri . '&page=\'+page+\'\'}" value="' . $this->page . '" style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.previousSibling.value;location=\'' . $this->uri . '&page=\'+page+\'\'"> ';
- }
- //显示分页
- public function fpage($display = array(0, 1, 2, 3, 4, 5, 6, 7, 8))
- {
- $html[0] = " 共有<b>{$this->total}</b>个记录 ";
- $html[1] = " 每页显示<b>{$this->listRows}</b>条,本页<b>{$this->start()}~{$this->end()}</b>条 ";
- $html[2] = " <b>{$this->page}/{$this->pageNum}</b>页 ";
- $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;
- }
- }
|