thinkphp分页
这个分页类是在thinkphp框架内置的分页类的基础上修改而来;
原分页类的一些设计,在实际运用中感觉不是很方便;
1:只有一页内容时不显示分页;
2:原分页类在当前页是第一页和最后一页的时候,不显示第一页和最后一页的按钮;
3:分页数比较少时不显示首页和末页按钮;
4:包裹分页内容的父级div没有class;
针对以上问题逐一进行了修改成如下;
1:如果没有数据不显示分页,如果有一页及以上内容即显示分页;
2:默认就显示第一页和最后一页按钮,但是在当前页是第一页和最后一页的时候按钮点击无效果;
3:默认就显示首页和末页按钮;
4:为包裹分页内容的父级div添加名为page的class;
5:显示总共查出的内容条数;
示例环境:thinkphp3.2.3;
分页类目录:/Thinkphp/Library/Org/Bjy/Page.class.php
分页类代码如下:
<?php // +--------------------------------------------------------------------------- /* * PHP分页类 namespace OrgBjy; class Page{ public $firstRow ; // 起始行数 public $listRows ; // 列表每页显示行数 public $parameter ; // 分页跳转时要带的参数 public $totalRows ; // 总行数 public $totalPages ; // 分页总页面数 public $rollPage = 5; // 分页栏每页显示的页数 public $lastSuffix = true; // 最后一页是否显示总页数 private $p = 'p' ; //分页参数名 private $url = '' ; //当前链接URL private $nowPage = 1; // 分页显示定制 private $config = array ( 'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>' , 'first' => '首页' , 'prev' => '上一页' , 'next' => '下一页' , 'last' => '末页' , 'theme' => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%' , ); /** * 架构函数 * @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 ->nowPage = $this ->nowPage>0 ? $this ->nowPage : 1; $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(MODULE_NAME. '/' .CONTROLLER_NAME. '/' .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 ); //上一页 $up_row = $this ->nowPage - 1; $up_page = $up_row > 0 ? '<a class="prev" href="' . $this ->url( $up_row ) . '">' . $this ->config[ 'prev' ] . '</a>' : '<a class="prev not-allowed" href="javascript:;">' . $this ->config[ 'prev' ] . '</a>' ; //下一页 $down_row = $this ->nowPage + 1; $down_page = ( $down_row <= $this ->totalPages) ? '<a class="next" href="' . $this ->url( $down_row ) . '">' . $this ->config[ 'next' ] . '</a>' : '<a class="next not-allowed" href="javascript:;">' . $this ->config[ 'next' ] . '</a>' ; //第一页 $the_first = '<a class="first" href="' . $this ->url(1) . '">' . $this ->config[ 'first' ] . '</a>' ; //最后一页 $the_end = '<a class="end" 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) { if ( $page != $this ->nowPage){ if ( $page <= $this ->totalPages){ $link_page .= '<a class="num" href="' . $this ->url( $page ) . '">' . $page . '</a>' ; } else { break ; } } else { $link_page .= '<span class="current">' . $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 class="page">' . $page_str . '</div>' ; } } |
分页类调用:
$count = $this ->where( $where )-> count (); $page = new OrgBjyPage( $count , $limit ); $list = $this ->where( $where )->order( 'addtime desc' )->limit( $page ->firstRow. ',' . $page ->listRows)->select(); $show = $page ->show(); |
分页类css
.b-page {
background
:
#fff
;
box-shadow:
0px
1px
2px
0px
#E2E2E2
;
}
.page {
width
:
100%
;
padding
:
30px
15px
;
background
:
#FFF
;
text-align
:
center
;
overflow
:
hidden
;
}
.page .first,
.page .prev,
.page .current,
.page .num,
.page .current,
.page .next,
.page .end {
padding
:
8px
16px
;
margin
:
0px
5px
;
display
: inline-
block
;
color
:
#008CBA
;
border
:
1px
solid
#F2F2F2
;
border-radius:
5px
;
}
.page .first:hover,
.page .prev:hover,
.page .current:hover,
.page .num:hover,
.page .current:hover,
.page .next:hover,
.page .end:hover {
text-decoration
:
none
;
background
:
#F8F5F5
;
}
.page .current {
background-color
:
#008CBA
;
color
:
#FFF
;
border-radius:
5px
;
border
:
1px
solid
#008CBA
;
}
.page .current:hover {
text-decoration
:
none
;
background
:
#008CBA
;
}
.page .not-allowed {
cursor
: not-allowed;
}