06.PAGEclass
goer ... 2022-01-08 大约 2 分钟
[toc]
# page
分页类
namespace Page;
class page{
private $current; // 当前页的参数
private $count;// 总资源(查询数据表的总数据)
private $limit; // 查询出每一页有多少条数据
private $size; // 页码
private $class; // 分页样式
public function __construct($current,$count,$limit,$size,$class="digg")
{
$this->current = $current;
$this->count = $count;
$this->limit = $limit;
$this->size = $size;
$this->class = $class;
}
public function get_url(){
$str = $_SERVER['PHP_SELF'].'?';
if(!empty($_GET)){
foreach($_GET as $key=>$v){//不是分页参数,其他参数给保留下来
if($key != 'page'){
// index.php?id=1&page=2
$str.= "$key=$v&";
}
}
}
return $str;
}
// 生成分页方法
public function page(){
$str = '';
if($this->count > $this->limit){
$url = $this->get_url;
$pages = ceil($this->count / $this->limit);// 共有多少页
$str.= '<div class="'.$this->class.'">';
// 第一种情况,只有首页和上一页
if($this->current != 1){
/*
如果当前页是1时,它就不会有首页和上一页
[1] 2 3 4
如果当前页是2时,那么它就会有首页和上一页
1 [2] 3 4
*/
$str.= '<a href="'. $url .'page=1">首页</a>';
$str.= '<a href="'. $url .'page='.($this->current-1).'">上一页</a>';
}
/*
如果显示页码只有5页
1 2 3 4 5
当前页在显示的页码的左侧
[1] 2 3 4 5
1 [2] 3 4 5
当前页在显示的页码的中间
1 2 [3] 4 5
当前页在显示的页码的右侧 一般当前页在显示的页码右侧,说明分页差不多没了
1 2 3 [4] 5
1 2 3 4 [5]
*/
if($this->current < ceil($this->size / 2)){
$start = 1; // 开始的位置
$end = $pages < $this->size ? $pages : $this->size; //
}elseif ($this->current >$pages - floor($this->size / 2)) {
$start = $pages-$this->size+1 <=0 ? 1:$pages-$this->size+1;
$end = $pages;
}else {
$start = $this->current - floor($this->size / 2);
$end = $this->current + floor($this->size / 2);
}
for($i=$start;$i<=$end;$i++){
if($i == $this->current){
$str.='<span class="current">'.$i.'</span>';
}else{
$str.='<a href="'. $url .'page='.$i.'">'.$i.'</a>';
}
}
// 第三种情况,只有尾页和下一页
if($this->current != $pages){
$str.= '<a href="'. $url .'page='.($this->current+1).'">下一页</a>';
$str.= '<a href="'. $url .'page='.$pages.'">尾页</a>';
}
$str.='</div>';
}
return $str;
}
}
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
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