// +---------------------------------------------------------------------- namespace Page; class ajaxPage { public $firstRow; // 起始行数 public $listRows; // 列表每页显示行数 public $parameter; // 分页跳转时要带的参数 public $totalRows; // 总行数 public $totalPages; // 分页总页面数 public $rollPage = 11; // 分页栏每页显示的页数 public $lastSuffix = true; // 最后一页是否显示总页数 private $p = 'page'; //分页参数名 public $url = ''; //当前链接URL private $nowPage = 1; public $ext = '/'; // 分页显示定制 private $config = array( 'header' => '
  • 共 %TOTAL_ROW% 条记录
  • ', 'prev' => '<<上一页', 'next' => '下一页>>', 'first' => '首页', 'lasts' => '最后一页', 'theme' => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%', ); /** * 架构函数 * @param array $totalRows 总的记录数 * @param array $listRows 每页显示记录数 * @param array $parameter 分页跳转的参数 */ public function __construct($totalRows, $listRows = 20, $parameter = array(), $ext = '/') { // Config('VAR_PAGE') && $this->p = Config('VAR_PAGE'); //设置分页参数名称 /* 基础设置 */ $this->totalRows = $totalRows; //设置总记录数 $this->listRows = $listRows; //设置每页显示行数 $this->parameter = empty($parameter) ? $_GET : $parameter; $this->nowPage = empty(input($this->p)) ? 1 : input($this->p, 'intval'); $this->firstRow = $this->listRows * ($this->nowPage - 1); $this->ext = $ext; } /** * 定制分页链接设置 * @param string $name 设置名称 * @param string $value 设置值 */ public function setConfig($name, $value) { if (isset($this->config[$name])) { $this->config[$name] = $value; } } /** * 生成链接URL * @param integer $page 页码 * @return string */ private function url($page) { return str_replace('[PAGE]', $page, $this->url); } /** * 组装分页链接 * @return string */ public function show() { if (0 == $this->totalRows) return ''; /* 生成URL */ $this->parameter[$this->p] = '[PAGE]'; $url_tmp = $flag =''; /* 计算分页信息 */ $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数 if (!empty($this->totalPages) && $this->nowPage > $this->totalPages) { $this->nowPage = $this->totalPages; } /* 计算分页临时变量 */ $now_cool_page = $this->rollPage / 2; $now_cool_page_ceil = ceil($now_cool_page); $this->lastSuffix && $this->config['last'] = $this->totalPages; //上一页 $up_row = $this->nowPage - 1; $prev_url = $this->url($up_row); $up_page = $up_row > 0 ? '
  • ' . $this->config['prev'] . '
  • ' : ''; //下一页 $down_row = $this->nowPage + 1; $down_page = ($down_row <= $this->totalPages) ? '
  • ' . $this->config['next'] . '
  • ' : ''; //第一页 $the_first = ''; if ($this->totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) > 2) { $the_first = '
  • ' . $this->config['first'] . '
  • '; //添加省略号 if ($this->nowPage > 4) $the_first .= '
  • ...
  • '; } //最后一页 $the_end = ''; if ($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages) { if (($this->totalPages - ($this->nowPage + 2)) >= 1) { $the_end = '
  • ...
  • '; } $the_end .= '
  • ' . $this->totalPages . '
  • '; } //数字连接 $link_page = ""; //当前页等于 1/2/3/4 的时候显示 5 个 $page_limit = [1, 2, 3, 4]; if (in_array($this->nowPage, $page_limit)) { $show_num = 5; } else { $show_num = 0; } for ($i = 1; $i <= $this->rollPage; $i++) { if (($this->nowPage - $now_cool_page) <= 0 || ($this->nowPage - $now_cool_page_ceil) == 1) { $page = $i; } elseif (($this->nowPage + $now_cool_page - 1) >= $this->totalPages) { $page = $this->totalPages - $this->rollPage + $i; } else { $page = $this->nowPage - $now_cool_page_ceil + $i; } if ($page > 0 && $page != $this->nowPage) { if ($page <= $this->totalPages) { //如果是第一页 去除 _1参数 $curr_url = $this->url($page); if ($page == 1) { $curr_url = $this->url($page); } if ($i <= $show_num || $show_num == 0 || $this->totalPages < 6) { //如果总页数不小于7,当前页不大于 4,隐藏2 if (!(($i == 1 && $this->totalPages < 7 && $this->nowPage > 4))) { $link_page .= '
  • ' . $page . '
  • '; } //如果仅有5页,并且为第5页的时候 if ($i == 1 && $this->totalPages == 5 && $this->nowPage == 5) { $link_page = '
  • ' . $this->config['first'] . '
  • '; } } } else { break; } } else { if ($page > 0 && $this->totalPages != 1) { $link_page .= '
  • '.$page.'
  • '; } } } if ($this->totalPages > 1) { //替换分页内容 $page_str = str_replace( array('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%'), array($this->config['header'], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages), $this->config['theme']); return "{$page_str}"; } } }