下面是一个Tp3.2的自定义分页,这个方法也是在看过一个网友的博客之后受到启发这么写的。经过了一些修改,大家在看到代码之后也可以进行修改自定义样式;
主要的样式控制文件就是page.css,框架底层的分页类可以直接进行粘贴复制使用;
1. 框架底层的page.class.php 路径( Engine\Library\Think)
其实这个文件不需要过多修改,也可以直接使用官方的就行;下面是我现在用的,稍作了修改;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
<?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' %20=> '<span class="rows">共 %TOTAL_ROW% 条记录</span>' , 'prev' => '<<' , 'next' => '>>' , 'first' %20=> '1...' , 'last' => '...%TOTAL_PAGE%' , 'theme' %20=> '%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 class="prev" href="' %20. $this ->url( $up_row ) . '" rel="external nofollow" >' %20. $this ->config[ 'prev' ] . '</a>' %20: '' ; //下一页 $down_row = $this ->nowPage + 1; $down_page = ( $down_row <= $this ->totalPages) ? '<a class="next" href="' %20. $this ->url( $down_row ) . '" rel="external nofollow" >' %20. $this ->config[ 'next' ] . '</a>' %20: '' ; //第一页 $the_first = '' ; if ( $this ->totalPages > $this ->rollPage && ( $this ->nowPage - $now_cool_page ) >= 1){ $the_first = '<a class="first" href="' %20. $this ->url(1) . '" rel="external nofollow" >' %20. $this ->config[ 'first' ] . '</a>' ; } //最后一页 $the_end = '' ; if ( $this ->totalPages > $this ->rollPage && ( $this ->nowPage + $now_cool_page ) < $this ->totalPages){ $the_end = '<a class="end" href="' %20. $this ->url( $this ->totalPages) . '" rel="external nofollow" >' %20. $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 class="num" href="' %20. $this ->url( $page ) . '" rel="external nofollow" >' %20. $page . '</a>' ; } else { break ; } } else { if ( $page > 0 && $this ->totalPages != 1){ $link_page .= '<span class="current">' %20. $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。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public function index(){ $obj =M( "news" ); $count = $obj ->where( 'status=1 and classID=74 ' )-> count (); // 查询满足要求的总记录数 $limit = 10; $Page = new \Think\Page( $count , $limit ); // 实例化分页类 传入总记录数和每页显示的记录数(25) $show = $Page ->show(); // 分页显示输出 $list = $obj ->where( 'status=1 and classID=74 ' )->order( 'writetime desc' )->limit( $Page ->firstRow. ',' . $Page ->listRows)->select(); $firstlist = $obj ->where( 'status=1 and classID=74 and Indexfirst=1' )->order( 'writetime desc' )->limit(4)->select(); $this ->assign( 'firstlist' , $firstlist ); $this ->assign( 'page' , $show ); // 赋值分页输出 $this ->assign( 'list' , $list ); $this ->display(); } |
3. 接下来是View层,样式控制。page.css文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
.b-page { background : #fff ; box-shadow: 0px 1px 2px 0px #E2E2E2 ; } .page { width : 100% ; background : #FFF ; text-align : center ; overflow : hidden ; font-size : 14px ; margin-top : 50px ; } .page .first, .page .prev, .page .current, .page .num, .page .current, .page .next, .page .end { padding : 8px 16px ; margin : 0px 5px ; display : inline- block ; color : #144970 ; 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 : #144970 ; color : #FFF ; border-radius: 5px ; } .page .current:hover { text-decoration : none ; background : #144970 ; } .page .not-allowed { cursor : not-allowed; } |
原文链接:http://blog.csdn.net/gu_wen_jie/article/details/70142106
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容