时间:2021-07-01 10:21:17 帮助过:6人阅读
有一种自动分页机制,可以将移动 Web窗体中的内
容分割成一组组较小的页进行呈现,以适合于特定的设备。该机制还呈现可用于浏览到其他页的用户界面元素。
这篇文章主要介绍了一款万能的php分页类,特别好用,需要使用php分页类的朋友不要错过。代码如下
- <?php
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- /**
- * 分页类
- * 使用方式:
- * $page = new Page();
- * $page->init(1000, 20);
- * $page->setNotActiveTemplate('<span> {a} </span>');
- * $page->setActiveTemplate('{a}');
- * echo $page->show();
- *
- *
- * @author 风居住的地方
- */
- class Page {
- /**
- * 总条数
- */
- private $total;
- /**
- * 每页大小
- */
- private $pageSize;
- /**
- * 总页数
- */
- private $pageNum;
- /**
- * 当前页
- */
- private $page;
- /**
- * 地址
- */
- private $uri;
- /**
- * 分页变量
- */
- private $pageParam;
- /**
- * LIMIT XX,XX
- */
- private $limit;
- /**
- * 数字分页显示
- */
- private $listnum = 8;
- /**
- * 分页显示模板
- * 可用变量参数
- * {total} 总数据条数
- * {pagesize} 每页显示条数
- * {start} 本页开始条数
- * {end} 本页结束条数
- * {pagenum} 共有多少页
- * {frist} 首页
- * {pre} 上一页
- * {next} 下一页
- * {last} 尾页
- * {list} 数字分页
- * {goto} 跳转按钮
- */
- private $template = '<p><span>共有{total}条数据</span><span>每页显示{pagesize}条数据</span>,<span>本页{start}-{end}条数据</span><span>共有{pagenum}页</span><ul>{frist}{pre}{list}{next}{last}{goto}</ul></p>';
- /**
- * 当前选中的分页链接模板
- */
- private $activeTemplate = '<li class="active"><a href="javascript:;">{text}</a></li>';
- /**
- * 未选中的分页链接模板
- */
- private $notActiveTemplate = '<li><a href="{url}">{text}</a></li>';
- /**
- * 显示文本设置
- */
- private $config = array('frist' => '首页', 'pre' => '上一页', 'next' => '下一页', 'last' => '尾页');
- /**
- * 初始化
- * @param type $total 总条数
- * @param type $pageSize 每页大小
- * @param type $param url附加参数
- * @param type $pageParam 分页变量
- */
- public function init($total, $pageSize, $param = '', $pageParam = 'page') {
- $this->total = intval($total);
- $this->pageSize = intval($pageSize);
- $this->pageParam = $pageParam;
- $this->uri = $this->geturi($param);
- $this->pageNum = ceil($this->total / $this->pageSize);
- $this->page = $this->setPage();
- $this->limit = $this->setlimit();
- }
- /**
- * 设置分页模板
- * @param type $template 模板配置
- */
- public function setTemplate($template) {
- $this->template = $template;
- }
- /**
- * 设置选中分页模板
- * @param type $activeTemplate 模板配置
- */
- public function setActiveTemplate($activeTemplate) {
- $this->activeTemplate = $activeTemplate;
- }
- /**
- * 设置未选中分页模板
- * @param type $notActiveTemplate 模板配置
- */
- public function setNotActiveTemplate($notActiveTemplate) {
- $this->notActiveTemplate = $notActiveTemplate;
- }
- /**
- * 返回分页
- * @return type
- */
- public function show() {
- return str_ireplace(array(
- '{total}',
- '{pagesize}',
- '{start}',
- '{end}',
- '{pagenum}',
- '{frist}',
- '{pre}',
- '{next}',
- '{last}',
- '{list}',
- '{goto}',
- ), array(
- $this->total,
- $this->setPageSize(),
- $this->star(),
- $this->end(),
- $this->pageNum,
- $this->frist(),
- $this->prev(),
- $this->next(),
- $this->last(),
- $this->pagelist(),
- $this->gopage(),
- ), $this->template);
- }
- /**
- * 获取limit起始数
- * @return type
- */
- public function getOffset() {
- return ($this->page - 1) * $this->pageSize;
- }
- /**
- * 设置LIMIT
- * @return type
- */
- private function setlimit() {
- return "limit " . ($this->page - 1) * $this->pageSize . ",{$this->pageSize}";
- }
- /**
- * 获取limit
- * @param type $args
- * @return type
- */
- public function __get($args) {
- if ($args == "limit") {
- return $this->limit;
- } else {
- return null;
- }
- }
- /**
- * 初始化当前页
- * @return int
- */
- private function setPage() {
- if (!empty($_GET[$this->pageParam])) {
- if ($_GET[$this->pageParam] > 0) {
- if ($_GET[$this->pageParam] > $this->pageNum)
- return $this->pageNum;
- else
- return $_GET[$this->pageParam];
- }
- }
- return 1;
- }
- /**
- * 初始化url
- * @param type $param
- * @return string
- */
- private function geturi($param) {
- $url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], "?") ? "" : "?") . $param;
- $parse = parse_url($url);
- if (isset($parse["query"])) {
- parse_str($parse["query"], $params);
- unset($params["page"]);
- $url = $parse["path"] . "?" . http_build_query($params);
- return $url;
- } else {
- return $url;
- }
- }
- /**
- * 本页开始条数
- * @return int
- */
- private function star() {
- if ($this->total == 0) {
- return 0;
- } else {
- return ($this->page - 1) * $this->pageSize + 1;
- }
- }
- /**
- * 本页结束条数
- * @return type
- */
- private function end() {
- return min($this->page * $this->pageSize, $this->total);
- }
- /**
- * 设置当前页大小
- * @return type
- */
- private function setPageSize() {
- return $this->end() - $this->star() + 1;
- }
- /**
- * 首页
- * @return type
- */
- private function frist() {
- $html = '';
- if ($this->page == 1) {
- $html .= $this->replace("{$this->uri}&page=1", $this->config['frist'], true);
- } else {
- $html .= $this->replace("{$this->uri}&page=1", $this->config['frist'], false);
- }
- return $html;
- }
- /**
- * 上一页
- * @return type
- */
- private function prev() {
- $html = '';
- if ($this->page > 1) {
- $html .= $this->replace($this->uri.'&page='.($this->page - 1), $this->config['pre'], false);
- } else {
- $html .= $this->replace($this->uri.'&page='.($this->page - 1), $this->config['pre'], true);
- }
- return $html;
- }
- /**
- * 分页数字列表
- * @return type
- */
- private function pagelist() {
- $linkpage = "";
- $lastlist = floor($this->listnum / 2);
- for ($i = $lastlist; $i >= 1; $i--) {
- $page = $this->page - $i;
- if ($page >= 1) {
- $linkpage .= $this->replace("{$this->uri}&page={$page}", $page, false);
- } else {
- continue;
- }
- }
- $linkpage .= $this->replace("{$this->uri}&page={$this->page}", $this->page, true);
- for ($i = 1; $i <= $lastlist; $i++) {
- $page = $this->page + $i;
- if ($page <= $this->pageNum) {
- $linkpage .= $this->replace("{$this->uri}&page={$page}", $page, false);
- } else {
- break;
- }
- }
- return $linkpage;
- }
- /**
- * 下一页
- * @return type
- */
- private function next() {
- $html = '';
- if ($this->page < $this->pageNum) {
- $html .= $this->replace($this->uri.'&page='.($this->page + 1), $this->config['next'], false);
- } else {
- $html .= $this->replace($this->uri.'&page='.($this->page + 1), $this->config['next'], true);
- }
- return $html;
- }
- /**
- * 最后一页
- * @return type
- */
- private function last() {
- $html = '';
- if ($this->page == $this->pageNum) {
- $html .= $this->replace($this->uri.'&page='.($this->pageNum), $this->config['last'], true);
- } else {
- $html .= $this->replace($this->uri.'&page='.($this->pageNum), $this->config['last'], false);
- }
- return $html;
- }
- /**
- * 跳转按钮
- * @return string
- */
- private function gopage() {
- $html = '';
- $html.=' <input type="text" value="' . $this->page . '" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.value;location=\'' . $this->uri . '&page=\'+page+\'\'}" style="width:25px;"/><input type="button" onclick="javascript:var page=(this.previousSibling.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.previousSibling.value;location=\'' . $this->uri . '&page=\'+page+\'\'" value="GO"/>';
- return $html;
- }
- /**
- * 模板替换
- * @param type $replace 替换内容
- * @param type $result 条件
- * @return type
- */
- private function replace($url, $text, $result = true) {
- $template = ($result ? $this->activeTemplate : $this->notActiveTemplate);
- $html = str_replace('{url}', $url, $template);
- $html = str_replace('{text}', $text, $html);
- return $html;
- }
- }
第二款php分页类
- <?php
- /*
- *本程序文件对分页程序进行了封装
- *
- */
- class Page_Link
- {
- var $page_max = 10; //一组页码的最大数
- var $page_num = 10; //总页数
- var $length = 20; //一页的数据条数
- var $isNextPage = true;
- var $isFirstPage = false;
- function Calculation_Page_Num( $total )
- {
- $this->page_num = ceil( $total / $this->length );
- return $this->page_num;
- }
- function Calculation_Min_Max( $act_page = 1 )
- {
- // 定义左右偏移量
- $py_left = 0;
- $py_right = 0;
- // 定义左右边界
- $bj_left = 0;
- $bj_right = 0;
- // 定义滚动区间边界
- $gd_left = 0;
- $gd_right = 0;
- // 判断是否需要分组
- if ( ( $this->page_num - $this->page_max ) <= 0 )
- {
- // 不需要分组
- $bj_left = 1;
- $bj_right = $this->page_num;
- }
- else
- {
- // 要进行分组
- // 判断容量的奇偶
- $tmp = $this->page_max % 2;
- if ( $tmp === 1 )
- {
- // 奇数
- $py_left = $py_right = ( $this->page_max - 1 ) / 2;
- }
- else
- {
- // 偶数
- $py_left = $this->page_max / 2 - 1;
- $py_right = $this->page_max / 2;
- }
- // 计算滚动区间
- $gd_left = 1 + $py_left;
- $gd_right = $this->page_num - $py_right;
- // 判断当前页是否落入了滚动区间
- if ( $act_page >= $gd_left && $act_page <= $gd_right )
- {
- // 区间内
- $bj_left = $act_page - $py_left;
- $bj_right = $act_page + $py_right;
- }
- else
- {
- // 区间外
- if ( ( $act_page - $py_left ) <= 1 )
- {
- // 左侧固定区间
- $bj_left = 1;
- $bj_right = $this->page_max;
- }
- else
- {
- $bj_left = $this->page_num - $this->page_max + 1;
- $bj_right = $this->page_num;
- }
- }
- }
- $res = array();
- $res['min'] = $bj_left;
- $res['max'] = $bj_right;
- return $res;
- }
- // 主方法
- function make_page( $total, $act_page, $url, $param )
- {
- $page_num = $this->Calculation_Page_Num( $total );
- $arr_min_max = $this->Calculation_Min_Max( $act_page );
- if (!eregi("([?|&]$param=)", $url)) {
- $url = strpos($url,"?")===false?$url."?":$url."&";
- $url = $url."$param=0";
- }
- if ( $act_page > $page_num )
- {
- $act_page = $page_num;
- }
- // 用正则把url改成正规的
- $url = eregi_replace( $param . '=[0-9]+', $param . '=0', $url );
- $res = array();
- $d = 0;
- for( $i = $arr_min_max['min'];$i <= $arr_min_max['max'];$i++ )
- {
- if ( $i == $act_page )
- {
- $res[$d]['url'] = '';
- $res[$d]['name'] = $i;
- $res[$d]['no'] = $i;
- }
- else
- {
- $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url );
- $res[$d]['name'] = $i;
- $res[$d]['no'] = $i;
- }
- $d++;
- }
- if ( $this->isNextPage )
- {
- $res = $this->make_before_next_link( $res, $act_page, $url, $param );
- }
- if ( $this->isFirstPage )
- {
- $res = $this->make_first_end_link( $res, $act_page, $url, $param );
- }
- return $res;
- }
- //// 带总页数
- function make_page_with_total( $total, $act_page, $url, $param )
- {
- $page_num = $this->Calculation_Page_Num( $total );
- $arr_min_max = $this->Calculation_Min_Max( $act_page );
- if (!eregi("([?|&]$param=)", $url)) {
- $url = strpos($url,"?")===false?$url."?":$url."&";
- $url = $url."$param=0";
- }
- if ( $act_page > $page_num )
- {
- $act_page = $page_num;
- }
- // 用正则把url改成正规的
- $url = eregi_replace( $param . '=[0-9]+', $param . '=0', $url );
- $res = array();
- $d = 0;
- for( $i = $arr_min_max['min'];$i <= $arr_min_max['max'];$i++ )
- {
- if ( $i == $act_page )
- {
- $res[$d]['url'] = '';
- $res[$d]['name'] = $i;
- $res[$d]['no'] = $i;
- }
- else
- {
- $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url );
- $res[$d]['name'] = $i;
- $res[$d]['no'] = $i;
- }
- $d++;
- }
- if ( $this->isNextPage )
- {
- $res = $this->make_before_next_link( $res, $act_page, $url, $param );
- }
- if ( $this->isFirstPage )
- {
- $res = $this->make_first_end_link( $res, $act_page, $url, $param );
- }
- $total_num= ceil($total/$this->length);
- $result['total']=$total_num;
- $result['DATA']=$res;
- return $result;
- }
- // 附加上一页和下一页
- function make_before_next_link( $arr, $act, $url, $param )
- {
- $tmp = array();
- $before = $act - 1;
- $next = $act + 1;
- if ( $before < 1 )
- {
- $before = 1;
- $tmp[0]['url'] = '';
- $tmp[0]['name'] = "上一页";
- $tmp[0]['no'] = $before;
- }
- else
- {
- $tmp[0]['url'] = str_replace( $param . '=0', $param . '=' . $before, $url );
- $tmp[0]['name'] = "上一页";
- $tmp[0]['no'] = $before;
- }
- $counts = sizeof( $arr );
- $tmp_count = sizeof( $tmp );
- for( $i = 0;$i < $counts;$i++ )
- {
- $tmp[$tmp_count]['url'] = $arr[$i]['url'];
- $tmp[$tmp_count]['name'] = $arr[$i]['name'];
- $tmp[$tmp_count]['no'] = $arr[$i]['no'];
- $tmp_count++;
- }
- if ( $next > $this->page_num )
- {
- $next = $this->page_num;
- $tmp[$tmp_count]['url'] = '';
- $tmp[$tmp_count]['name'] = "下一页";
- $tmp[$tmp_count]['no'] = $next;
- }
- else
- {
- $tmp[$tmp_count]['url'] = str_replace( $param . '=0', $param . '=' . $next, $url );
- $tmp[$tmp_count]['name'] = "下一页";
- $tmp[$tmp_count]['no'] = $next;
- }
- return $tmp;
- }
- // 附加首页和尾页
- function make_first_end_link( $arr, $act, $url, $param )
- {
- $tmp = array();
- $before = 1;
- $next = $this->page_num;
- if ( $act == 1 )
- {
- $before = 1;
- $tmp[0]['url'] = '';
- $tmp[0]['name'] = "首页";
- $tmp[0]['no'] = $before;
- }
- else
- {
- $tmp[0]['url'] = str_replace( $param . '=0', $param . '=' . $before, $url );
- $tmp[0]['name'] = "首页";
- $tmp[0]['no'] = $before;
- }
- $counts = sizeof( $arr );
- $tmp_count = sizeof( $tmp );
- for( $i = 0;$i < $counts;$i++ )
- {
- $tmp[$tmp_count]['url'] = $arr[$i]['url'];
- $tmp[$tmp_count]['name'] = $arr[$i]['name'];
- $tmp[$tmp_count]['no'] = $arr[$i]['no'];
- $tmp_count++;
- }
- if ( $act == $this->page_num )
- {
- $tmp[$tmp_count]['url'] = '';
- $tmp[$tmp_count]['name'] = "尾页";
- $tmp[$tmp_count]['no'] = $next;
- }
- else
- {
- $tmp[$tmp_count]['url'] = str_replace( $param . '=0', $param . '=' . $next, $url );
- $tmp[$tmp_count]['name'] = "尾页";
- $tmp[$tmp_count]['no'] = $next;
- }
- return $tmp;
- }
- ?>
以上就是一款万能的php分页类实例代码的详细内容,更多请关注Gxl网其它相关文章!