123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- <?php
- /**
- * 第三方分页类.
- * User: yqj
- * Date: 2017/5/3
- * Time: 17:00
- */
- /**
- * Pagination
- *
- * Supplies an API for setting pagination details, and renders the resulting
- * pagination markup (html) through the included render.inc.php file.
- *
- * @note The SEO methods (canonical/rel) were written following Google's
- * suggested patterns. Namely, the canoical url excludes any
- * peripheral parameters that don't relate to the pagination
- * series. Whereas the prev/next rel link tags include any params
- * found in the request.
- * @author Oliver Nassar <onassar@gmail.com>
- * @todo add setter parameter type and range checks w/ exceptions
- * @example
- * <code>
- * // source inclusion
- * require_once APP . '/vendors/PHP-Pagination/Pagination.class.php';
- *
- * // determine page (based on <_GET>)
- * $page = isset($_GET['page']) ? ((int) $_GET['page']) : 1;
- *
- * // instantiate with page and records as constructor parameters
- * $pagination = (new Pagination($page, 200));
- * $markup = $pagination->parse();
- * </code>
- * @example
- * <code>
- * // source inclusion
- * require_once APP . '/vendors/PHP-Pagination/Pagination.class.php';
- *
- * // determine page (based on <_GET>)
- * $page = isset($_GET['page']) ? ((int) $_GET['page']) : 1;
- *
- * // instantiate; set current page; set number of records
- * $pagination = (new Pagination());
- * $pagination->setCurrent($page);
- * $pagination->setTotal(200);
- *
- * // grab rendered/parsed pagination markup
- * $markup = $pagination->parse();
- * </code>
- */
- namespace app\Lib;
- class Pagination
- {
- public $first_row; //起始行数
- public $list_rows; //列表每页显示行数
- protected $total_pages; //总页数
- protected $total_rows; //总行数
- protected $now_page; //当前页数
- protected $method = 'defalut'; //处理情况 Ajax分页 Html分页(静态化时) 普通get方式
- protected $parameter = '';
- protected $page_name; //分页参数的名称
- protected $ajax_func_name;
- public $plus = 3; //分页偏移量
- protected $url;
- /**
- * 构造函数
- * @param unknown_type $data
- */
- public function __construct($data = array())
- {
- $this->total_rows = $data['total_rows'];
- $this->parameter = !empty($data['parameter']) ? $data['parameter'] : '';
- $this->list_rows = !empty($data['list_rows']) && $data['list_rows'] <= 100 ? $data['list_rows'] : 15;
- $this->total_pages = ceil($this->total_rows / $this->list_rows);
- $this->page_name = !empty($data['page_name']) ? $data['page_name'] : 'p';
- $this->ajax_func_name = !empty($data['ajax_func_name']) ? $data['ajax_func_name'] : '';
- $this->method = !empty($data['method']) ? $data['method'] : '';
- /* 当前页面 */
- if(!empty($data['now_page']))
- {
- $this->now_page = intval($data['now_page']);
- }else{
- $this->now_page = !empty($_GET[$this->page_name]) ? intval($_GET[$this->page_name]):1;
- }
- $this->now_page = $this->now_page <= 0 ? 1 : $this->now_page;
- if(!empty($this->total_pages) && $this->now_page > $this->total_pages)
- {
- $this->now_page = $this->total_pages;
- }
- $this->first_row = $this->list_rows * ($this->now_page - 1);
- }
- /**
- * 得到当前连接
- * @param $page
- * @param $text
- * @return string
- */
- protected function _get_link($page,$text)
- {
- switch ($this->method) {
- case 'ajax':
- $parameter = '';
- if($this->parameter)
- {
- $parameter = ','.$this->parameter;
- }
- return '<a onclick="' . $this->ajax_func_name . '(\'' . $page . '\''.$parameter.')" href="javascript:void(0)">' . $text . '</a>' . "\n";
- break;
- case 'html':
- $url = str_replace('@', $page,$this->parameter);
- return '<li class="page-item"><a href="' .$url . '">' . $text . '</a>' . "</li>";
- break;
- default:
- return '<a href="' . $this->_get_url($page) . '">' . $text . '</a>' . "\n";
- break;
- }
- }
- /**
- * 设置当前页面链接
- */
- protected function _set_url()
- {
- $url = $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;
- $parse = parse_url($url);
- if(isset($parse['query'])) {
- parse_str($parse['query'],$params);
- unset($params[$this->page_name]);
- $url = $parse['path'].'?'.http_build_query($params);
- }
- if(!empty($params))
- {
- $url .= '&';
- }
- $this->url = $url;
- }
- /**
- * 得到$page的url
- * @param $page 页面
- * @return string
- */
- protected function _get_url($page)
- {
- if($this->url === NULL)
- {
- $this->_set_url();
- }
- // $lable = strpos('&', $this->url) === FALSE ? '' : '&';
- return $this->url . $this->page_name . '=' . $page;
- }
- /**
- * 得到第一页
- * @return string
- */
- public function first_page($name = '第一页')
- {
- if($this->now_page > 5)
- {
- return $this->_get_link('1', $name);
- }
- return '';
- }
- /**
- * 最后一页
- * @param $name
- * @return string
- */
- public function last_page($name = '最后一页')
- {
- if($this->now_page < $this->total_pages - 5)
- {
- return $this->_get_link($this->total_pages, $name);
- }
- return '';
- }
- /**
- * 上一页
- * @return string
- */
- public function up_page($name = '上一页')
- {
- if($this->now_page != 1)
- {
- return $this->_get_link($this->now_page - 1, $name);
- }
- return '';
- }
- /**
- * 下一页
- * @return string
- */
- public function down_page($name = '下一页')
- {
- if($this->now_page < $this->total_pages)
- {
- return $this->_get_link($this->now_page + 1, $name);
- }
- return '';
- }
- /**
- * 分页样式输出
- * @param $param
- * @return string
- */
- public function show($param = 1)
- {
- if($this->total_rows < 1)
- {
- return '';
- }
- $className = 'show_' . $param;
- $classNames = get_class_methods($this);
- if(in_array($className, $classNames))
- {
- return $this->$className();
- }
- return '';
- }
- protected function show_2()
- {
- if($this->total_pages != 1)
- {
- $return = '';
- $return .= $this->up_page('<');
- for($i = 1;$i<=$this->total_pages;$i++)
- {
- if($i == $this->now_page)
- {
- $return .= "<li class='page-item active'><a class='page-link'>$i</a></li>";
- }
- else
- {
- if($this->now_page-$i>=4 && $i != 1)
- {
- $return .="<span class='pageMore'>...</span>\n";
- $i = $this->now_page-3;
- }
- else
- {
- if($i >= $this->now_page+5 && $i != $this->total_pages)
- {
- $return .="<span>...</span>\n";
- $i = $this->total_pages;
- }
- $return .= $this->_get_link($i, $i) . "\n";
- }
- }
- }
- $return .= $this->down_page('>');
- return $return;
- }
- }
- protected function show_1()
- {
- $plus = $this->plus;
- if( $plus + $this->now_page > $this->total_pages)
- {
- $begin = $this->total_pages - $plus * 2;
- }else{
- $begin = $this->now_page - $plus;
- }
- $begin = ($begin >= 1) ? $begin : 1;
- $return = '';
- $return .= $this->first_page();
- $return .= $this->up_page();
- for ($i = $begin; $i <= $begin + $plus * 2;$i++)
- {
- if($i>$this->total_pages)
- {
- break;
- }
- if($i == $this->now_page)
- {
- $return .= "<li class='page-item active'><a class='page-link'>$i</a></li>";
- }
- else
- {
- $return .= $this->_get_link($i, $i) . "\n";
- }
- }
- $return .= $this->down_page();
- $return .= $this->last_page();
- return $return;
- }
- protected function show_3()
- {
- $plus = $this->plus;
- if( $plus + $this->now_page > $this->total_pages)
- {
- $begin = $this->total_pages - $plus * 2;
- }else{
- $begin = $this->now_page - $plus;
- }
- $begin = ($begin >= 1) ? $begin : 1;
- $return = '总计 ' .$this->total_rows. ' 个记录分为 ' .$this->total_pages. ' 页, 当前第 ' . $this->now_page . ' 页 ';
- $return .= ',每页 ';
- $return .= '<input type="text" value="'.$this->list_rows.'" id="pageSize" size="3"> ';
- $return .= $this->first_page()."\n";
- $return .= $this->up_page()."\n";
- $return .= $this->down_page()."\n";
- $return .= $this->last_page()."\n";
- $return .= '<select onchange="'.$this->ajax_func_name.'(this.value)" id="gotoPage">';
- for ($i = $begin;$i<=$begin+10;$i++)
- {
- if($i>$this->total_pages)
- {
- break;
- }
- if($i == $this->now_page)
- {
- $return .= '<option selected="true" value="'.$i.'">'.$i.'</option>';
- }
- else
- {
- $return .= '<option value="' .$i. '">' .$i. '</option>';
- }
- }
- $return .= '</select>';
- return $return;
- }
- }
|