06.PAGEclass

goer ... 2022-01-08 Oop
  • Php
  • Oop
大约 2 分钟

page

[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