本文实例讲述了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程序设计有所帮助。