本文实例讲述了PHP实现仿Google分页效果的分页函数。分享给大家供大家参考。具体如下:
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
|
/** * 分页函数 * @param int $total 总页数 * @param int $pagesize 每页几条 * @param string $pkey url中页面变量名称 * @param string $url 基础url,其中的{page}会被替换为页码 * 依赖函数 request_uri httpInt */ function page( $total , $pagesize =10, $pkey = 'p' , $url =null){ $a_num =10; $first = ' 首页 ' ; $last = ' 尾页 ' ; $pre = ' 上页 ' ; $next = ' 下页 ' ; $a_num = $a_num %2==0? $a_num +1: $a_num ; if (! $url ){ $url =preg_replace( "/&?{$pkey}=[^&]{0,}/" , '' ,request_uri()); $url = strpos ( $url , '?' )===FALSE? $url . '?' . $pkey . '={page}' : $url . '&' . $pkey . '={page}' ; } $pages = ceil ( $total / $pagesize ); $curpage =httpInt( $pkey ,false,1); $curpage = $curpage > $pages || $curpage <=0?1: $curpage ; //当前页超范围置为1 $body = '' ; $prefix = '' ; $subfix = '' ; $start = $curpage -( $a_num -1)/2; //开始页 $end = $curpage +( $a_num -1)/2; //结束页 $start = $start <=0?1: $start ; //开始页超范围修正 $end = $end > $pages ? $pages : $end ; //结束页超范围修正 if ( $pages >= $a_num ){ //总页数大于显示页数 if ( $curpage <=( $a_num -1)/2){ $end = $a_num ;} //当前页在左半边补右边 if ( $end - $curpage <=( $a_num -1)/2){ $start -=5-( $end - $curpage );} //当前页在右半边补左边 } for ( $i = $start ; $i <= $end ; $i ++){ if ( $i == $curpage ){ $body .= '<b>' . $i . '</b>' ; } else { $body .= '<a href="' . str_replace ( '{page}' , $i , $url ). '"> ' . $i . ' </a>' ; } } $prefix =( $curpage ==1? '' : '<a href="' . str_replace ( '{page}' ,1, $url ). '">' . $first . '</a><a href="' . str_replace ( '{page}' , $curpage -1, $url ). '">' . $pre . '</a>' ); $subfix =( $curpage == $pages ? '' : '<a href="' . str_replace ( '{page}' , $curpage +1, $url ). '">' . $next . '</a><a href="' . str_replace ( '{page}' , $pages , $url ). '">' . $last . '</a>' ); $info = " 第{$curpage}/{$pages}页 " ; $go = '<script>function ekup(){if(event.keyCode==13){clkyup();}}function clkyup(){if(!/\d+/.test(document.getElementById(\'gsd09fhas9d\').value)){alert(\'请输入页码!\');return;};location=\'' . $url . '\'.replace(/\\{page\\}/,document.getElementById(\'gsd09fhas9d\').value);}</script><input onkeyup="ekup()" type="text" id="gsd09fhas9d" style="width:40px;vertical-align:text-baseline;padding:0 2px;font-size:10px;border:1px solid gray;"/> <span id="gsd09fhas9daa" onclick="clkyup();" style="cursor:pointer;text-decoration:underline;">转到</span>' ; return $prefix . $body . $subfix . $info . $go ; } /** * 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案 */ function request_uri() { if (isset( $_SERVER [ 'REQUEST_URI' ])) { $uri = $_SERVER [ 'REQUEST_URI' ]; } else { if (isset( $_SERVER [ 'argv' ])) { $uri = $_SERVER [ 'PHP_SELF' ] . '?' . $_SERVER [ 'argv' ][0]; } else { $uri = $_SERVER [ 'PHP_SELF' ] . '?' . $_SERVER [ 'QUERY_STRING' ]; } } return $uri ; } /** * 获取HTTP传递的整数 * @param string $key 参数名称 * @param bool $ispost 采取POST传递方式,默认为真http://blog.ddian.cn * @return 整数,非法时默认为 $default */ function httpInt( $key , $ispost =true, $default =0) { if ( $ispost ) { if (isset( $_POST [ $key ])) { if ( empty ( $_POST [ $key ])) { return $default ; } else { $val = trim( $_POST [ $key ]); if (preg_match( "/^\-?\d+$/" , $val )) return intval ( $val ); else return $default ; } } else { return $default ; } } else { if (isset( $_GET [ $key ])) { if ( empty ( $_GET [ $key ])) { return $default ; } else { $val = trim( $_GET [ $key ]); if (preg_match( "/^\-?\d+$/" , $val )) { return intval ( $val ); } else { return $default ; } } } else { return $default ; } } } |
希望本文所述对大家的php程序设计有所帮助。