]> git.immae.eu Git - github/wallabag/wallabag.git/blob - inc/3rdparty/paginator.php
new design, pagination & more
[github/wallabag/wallabag.git] / inc / 3rdparty / paginator.php
1 <?php
2 /*
3 * PHP Pagination Class
4 *
5 * @author David Carr - dave@daveismyname.com - http://www.daveismyname.com
6 * @version 1.0
7 * @date October 20, 2013
8 */
9 class Paginator{
10
11 /**
12 * set the number of items per page.
13 *
14 * @var numeric
15 */
16 private $_perPage;
17
18 /**
19 * set get parameter for fetching the page number
20 *
21 * @var string
22 */
23 private $_instance;
24
25 /**
26 * sets the page number.
27 *
28 * @var numeric
29 */
30 private $_page;
31
32 /**
33 * set the limit for the data source
34 *
35 * @var string
36 */
37 private $_limit;
38
39 /**
40 * set the total number of records/items.
41 *
42 * @var numeric
43 */
44 private $_totalRows = 0;
45
46
47
48 /**
49 * __construct
50 *
51 * pass values when class is istantiated
52 *
53 * @param numeric $_perPage sets the number of iteems per page
54 * @param numeric $_instance sets the instance for the GET parameter
55 */
56 public function __construct($perPage,$instance){
57 $this->_instance = $instance;
58 $this->_perPage = $perPage;
59 $this->set_instance();
60 }
61
62 /**
63 * get_start
64 *
65 * creates the starting point for limiting the dataset
66 * @return numeric
67 */
68 private function get_start(){
69 return ($this->_page * $this->_perPage) - $this->_perPage;
70 }
71
72 /**
73 * set_instance
74 *
75 * sets the instance parameter, if numeric value is 0 then set to 1
76 *
77 * @var numeric
78 */
79 private function set_instance(){
80 $this->_page = (int) (!isset($_GET[$this->_instance]) ? 1 : $_GET[$this->_instance]);
81 $this->_page = ($this->_page == 0 ? 1 : $this->_page);
82 }
83
84 /**
85 * set_total
86 *
87 * collect a numberic value and assigns it to the totalRows
88 *
89 * @var numeric
90 */
91 public function set_total($_totalRows){
92 $this->_totalRows = $_totalRows;
93 }
94
95 /**
96 * get_limit
97 *
98 * returns the limit for the data source, calling the get_start method and passing in the number of items perp page
99 *
100 * @return string
101 */
102 public function get_limit(){
103 return "LIMIT ".$this->get_start().",$this->_perPage";
104 }
105
106 /**
107 * page_links
108 *
109 * create the html links for navigating through the dataset
110 *
111 * @var sting $path optionally set the path for the link
112 * @var sting $ext optionally pass in extra parameters to the GET
113 * @return string returns the html menu
114 */
115 public function page_links($path='?',$ext=null)
116 {
117 $adjacents = "2";
118 $prev = $this->_page - 1;
119 $next = $this->_page + 1;
120 $lastpage = ceil($this->_totalRows/$this->_perPage);
121 $lpm1 = $lastpage - 1;
122
123 $pagination = "";
124 if($lastpage > 1)
125 {
126 $pagination .= "<div class='pagination'>";
127 if ($this->_page > 1)
128 $pagination.= "<a href='".$path."$this->_instance=$prev"."$ext'>« previous</a>";
129 else
130 $pagination.= "<span class='disabled'>« previous</span>";
131
132 if ($lastpage < 7 + ($adjacents * 2))
133 {
134 for ($counter = 1; $counter <= $lastpage; $counter++)
135 {
136 if ($counter == $this->_page)
137 $pagination.= "<span class='current'>$counter</span>";
138 else
139 $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>";
140 }
141 }
142 elseif($lastpage > 5 + ($adjacents * 2))
143 {
144 if($this->_page < 1 + ($adjacents * 2))
145 {
146 for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
147 {
148 if ($counter == $this->_page)
149 $pagination.= "<span class='current'>$counter</span>";
150 else
151 $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>";
152 }
153 $pagination.= "...";
154 $pagination.= "<a href='".$path."$this->_instance=$lpm1"."$ext'>$lpm1</a>";
155 $pagination.= "<a href='".$path."$this->_instance=$lastpage"."$ext'>$lastpage</a>";
156 }
157 elseif($lastpage - ($adjacents * 2) > $this->_page && $this->_page > ($adjacents * 2))
158 {
159 $pagination.= "<a href='".$path."$this->_instance=1"."$ext'>1</a>";
160 $pagination.= "<a href='".$path."$this->_instance=2"."$ext'>2</a>";
161 $pagination.= "...";
162 for ($counter = $this->_page - $adjacents; $counter <= $this->_page + $adjacents; $counter++)
163 {
164 if ($counter == $this->_page)
165 $pagination.= "<span class='current'>$counter</span>";
166 else
167 $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>";
168 }
169 $pagination.= "..";
170 $pagination.= "<a href='".$path."$this->_instance=$lpm1"."$ext'>$lpm1</a>";
171 $pagination.= "<a href='".$path."$this->_instance=$lastpage"."$ext'>$lastpage</a>";
172 }
173 else
174 {
175 $pagination.= "<a href='".$path."$this->_instance=1"."$ext'>1</a>";
176 $pagination.= "<a href='".$path."$this->_instance=2"."$ext'>2</a>";
177 $pagination.= "..";
178 for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
179 {
180 if ($counter == $this->_page)
181 $pagination.= "<span class='current'>$counter</span>";
182 else
183 $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>";
184 }
185 }
186 }
187
188 if ($this->_page < $counter - 1)
189 $pagination.= "<a href='".$path."$this->_instance=$next"."$ext'>next »</a>";
190 else
191 $pagination.= "<span class='disabled'>next »</span>";
192 $pagination.= "</div>\n";
193 }
194
195
196 return $pagination;
197 }
198 }