当前位置:主页 > PHP开发 > PHP基础 >

thinkPHP3.2实现分页自定义样式的方法

栏目:PHP基础 来源: 微信小程序开发网 阅读: 2018-02-28

下面是一个Tp3.2的自定义分页,这个方法也是在看过一个网友的博客之后受到启发这么写的。经过了一些修改,大家在看到代码之后也可以进行修改自定义样式;

主要的样式控制文件就是page.css,框架底层的分页类可以直接进行粘贴复制使用;

1. 框架底层的page.class.php 路径( Engine\Library\Think)

其实这个文件不需要过多修改,也可以直接使用官方的就行;下面是我现在用的,稍作了修改;

<?php namespace Think; class Page{ public $$firstRow; // 起始行数 public $$listRows; // 列表每页显示行数 public $$parameter; // 分页跳转时要带的参数 public $$totalRows; // 总行数 public $$totalPages; // 分页总页面数 public $$rollPage = 11;// 分页栏每页显示的页数 public $$lastSuffix = true; // 最后一页是否显示总页数 private $$p = 'p'; //分页参数名 private $$url = ''; //当前链接URL private $$nowPage = 1; // 分页显示定制 private $$config = array( 'header' => '<span>共 %TOTAL_ROW% 条记录</span>', 'prev' => '<<', 'next' => '>>', 'first' => '1...', 'last' => '...%TOTAL_PAGE%', '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()) { C('VAR_PAGE') && $$this->p = C('VAR_PAGE'); //设置分页参数名称 /* 基础设置 */ $$this->totalRows = $$totalRows; //设置总记录数 $$this->listRows = $$listRows; //设置每页显示行数 $$this->parameter = empty($$parameter) ? $$_GET : $$parameter; $$this->nowPage = empty($$_GET[$$this->p]) ? 1 : intval($$_GET[$$this->p]); $$this->firstRow = $$this->listRows * ($$this->nowPage - 1); } /** * 定制分页链接设置 * @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(urlencode('[PAGE]'), $$page, $$this->url); } /** * 组装分页链接 * @return string */ public function show() { if(0 == $$this->totalRows) return ''; /* 生成URL */ $$this->parameter[$$this->p] = '[PAGE]'; $$this->url = U(ACTION_NAME, $$this->parameter); /* 计算分页信息 */ $$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; $$up_page = $$up_row > 0 ? '<a href="' . $$this->url($$up_row) . '" >' . $$this->config['prev'] . '</a>' : ''; //下一页 $$down_row = $$this->nowPage + 1; $$down_page = ($$down_row <= $$this->totalPages) ? '<a href="' . $$this->url($$down_row) . '" >' . $$this->config['next'] . '</a>' : ''; //第一页 $$the_first = ''; if($$this->totalPages > $$this->rollPage && ($$this->nowPage - $$now_cool_page) >= 1){ $$the_first = '<a href="' . $$this->url(1) . '" >' . $$this->config['first'] . '</a>'; } //最后一页 $$the_end = ''; if($$this->totalPages > $$this->rollPage && ($$this->nowPage + $$now_cool_page) < $$this->totalPages){ $$the_end = '<a href="' . $$this->url($$this->totalPages) . '" >' . $$this->config['last'] . '</a>'; } //数字连接 $$link_page = ""; for($$i = 1; $$i <= $$this->rollPage; $$i++){ if(($$this->nowPage - $$now_cool_page) <= 0 ){ $$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){ $$link_page .= '<a href="' . $$this->url($$page) . '" >' . $$page . '</a>'; }else{ break; } }else{ if($$page > 0 && $$this->totalPages != 1){ $$link_page .= '<span>' . $$page . '</span>'; } } } //替换分页内容 $$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 "<div>{$$page_str}</div>"; } }

2. 控制器,随便写个demo。