1 <?php
2 /*核心:首页、上一页、下一页、尾页的url*/
3 /*超全局$_SERVER*/
4 $page = new Page(5,60);
5 var_dump($page->allUrl());
6 class Page{
7 // 每页显示的个数
8 protected $number;
9 // 一共有多少数据
10 protected $totalCount;
11 // 当前页
12 protected $page;
13 // url
14 protected $url;
15
16 public function __construct($number,$totalCount){
17 $this->number= $number;
18 $this->totalCount = $totalCount;
19 //得到总页数
20 $this->totalPage = $this->getTotalPage();
21 //得到当前页数
22 $this->page = $this->getPage();
23 //得到URL
24 $this->url = $this->getUrl();
25 echo $this->url;
26 }
27 /*得到总页数并向上取整*/
28 protected function getTotalPage(){
29 return ceil($this->totalCount/$this->number);
30 }
31 /**/
32 protected function getPage(){
33 if (empty($_GET['page'])){
34 $page=1;
35 }elseif ($_GET['page'] > $this->totalPage){
36 $page = $this->totalPage;
37 }elseif ($_GET["page"]<1){
38 $page = 1;
39 }else{
40 $page = $_GET['page'];
41 }
42 return $page;
43 }
44 protected function getUrl(){
45 //得到协议名
46 $scheme = $_SERVER['REQUEST_SCHEME'];
47 //得到主机名
48 $host= $_SERVER['SERVER_NAME'];
49 //得到端口号
50 $port = $_SERVER['SERVER_PORT'];
51 //得到路径和请求字符串
52 $url = $_SERVER['REQUEST_URI'];
53 /*中间做处理,要将page=5等这种字符串拼接URL
54 中,所以如果原来的url中有page这个参数,我们首先
55 需要将原来的page参数给清空*/
56 $urlArray = parse_url($url);
57 // var_dump($urlArray);
58
59 $path = $urlArray['path'];
60 if (!empty($urlArray['query'])){
61 //将query中的值转化为数组
62 parse_str($urlArray['query'],$array);
63 //如果他有page就将它删掉
64 unset($array['page']);
65 //将关联数组转化为query
66 $query = http_build_query($array);
67 //不为空的话就与path连结
68 if ($query != ''){
69 $path = $path.'?'.$query;
70 }
71 }
72 return 'http://'. $host.':'.$port.$path;
73 }
74 protected function setUrl($str){
75 if (strstr($this->url, '?')){
76 $url = $this->url.'&'.$str;
77 }else{
78 $url = $this->url.'?'.$str;
79 }
80 return $url;
81 }
82 /*所有的url*/
83 public function allUrl(){
84 return [
85 'first' => $this->first(),
86 'next' => $this->next(),
87 'prev'=> $this->prev(),
88 'end'=> $this->end(),
89 ];
90 }
91 /*首页*/
92 public function first(){
93 return $this->setUrl('page=1');
94 }
95 /*下一页*/
96 public function next(){
97 //根据当前page得带下一页的页码
98 if ($this->page+1 > $this->totalPage) {
99 $page = $this->totalPage;
100 }else{
101 $page = $this->page+1;
102 }
103 return $this->setUrl('page='.$page);
104 }
105 /*上一页*/
106 public function prev(){
107 //根据当前page得带下一页的页码
108 if ($this->page - 1 < 1) {
109 $page = 1;
110 }else{
111 $page = $this->page-1;
112 }
113 return $this->setUrl('page='.$page);
114 }
115 /*尾页*/
116 public function end(){
117 return $this->setUrl('page='.$this->totalPage);
118 }
119 /*limit 0,5*/
120 public function limit(){
121 $offset = ($this->page-1)*$this->number;
122 return $offset.','.$this->number;
123 }
124
125 }