Git - Framework SuperObject
fso:
/ pagenumeration.php
[ Download ]
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421 | <?php
if ( !class_exists('FSO') )
die('Framework SuperObject base class must be loaded to use its modules!');
/**
* PageNumeration Class
*
* Class that allows you to take a long list of things to display and do so
* over multiple pages
*
* Adapted from the original code written by Rick Selby <rick@ystv.york.ac.uk>
*/
class PageNumeration extends FSO_Module
{
/**********
PageNumeration Class
Takes a [long] array of items and assists in displaying them over
multiple pages. The class handles the GET variables itself, making the
real page code much cleaner
There are three "States":
1. Nothing set - when the page is first loaded, the first page will be
displayed
2. A page number given (via GET) - this page is displayed
3. A unique ID is given of an item in the list (via GET) - the page
containing this item is shown
Initialisation
setperpage(n) - sets the number of items to show on each page
setlist(array) - passes the array of things to show
setidref(str) - sets the reference in the array list of the unique ID
setlink(str) - sets the page to be linked to (in <a> tags)
Optional
reversepagenumbers() - reverses the page numbers displayed
Fuctions
getfirst() - gets the 'count' of the first item on the page
getperpage() - returns the number of items to be shown per page
getpagecount() - returns the total number of pages
getpagenum() - returns the page number being displayed
getid() - returns the unique ID given (if any)
getlinklist() - get list of links to other pages ( <1..4 5 6..9> )
getResults() - returns the slice of the array being shown on this
page
**********/
private $pagenum;
private $perpage;
private $total;
private $link;
private $change = false;
private $result;
private $id;
private $linklist;
private $idref;
private $reversenumbers = false;
private $GET_page = 'apage';
private $GET_id = 'single';
// {{{ public function __construct( &$db )
/**
* Constructor
*
* @param string $unique
* @return void
*/
public function __construct( $unique = '' )
{
parent::__construct();
if ($unique != '')
{
$this->GET_page = $unique.$this->GET_page;
$this->GET_id = $unique.$this->GET_id;
}
if (isset($_GET[$this->GET_id]) && (intval($_GET[$this->GET_id]) == $_GET[$this->GET_id]))
$this->id = $_GET[$this->GET_id];
else
$this->id = 0;
if (isset($_GET[$this->GET_page]) && (intval($_GET[$this->GET_page]) == $_GET[$this->GET_page]))
$this->pagenum = $_GET[$this->GET_page];
else
$this->pagenum = 1;
$this->change = true;
}
// }}}
// {{{ public function setperpage ( $pp )
/**
* SetPerPage function
*
* Sets the number of items to show per page
*
* @param integer $pp
* @return void
*/
public function setperpage($pp)
{
$this->perpage = $pp;
$this->change = true;
}
// }}}
// {{{ public function setidref ( $idRef )
/**
* SetIDRef function
*
* Sets the reference for the unique ID in the list
*
* @param string $idRef
* @return void
*/
public function setidref($idRef)
{
$this->idref = $idRef;
}
// }}}
// {{{ public function reversepagenumbers ( )
/**
* ReversePageNumbers function
*
* Tells the class to reverse the page numbers shown
*
* @param void
* @return void
*/
public function reversepagenumbers()
{
$this->reversenumbers = true;
}
// }}}
// {{{ public function setlist ( $result )
/**
* SetList function
*
* Sets the list of items being shown
*
* @param array $result
* @return void
*/
public function setlist($result)
{
$this->result = $result;
$this->total = sizeof($result);
$this->change = true;
}
// }}}
// {{{ public function setlink ( $link )
/**
* SetLink function
*
* Sets the link for the <a> tags
*
* @param string $link
* @return void
*/
public function setlink($link)
{
$this->link = $link;
$this->change = true;
}
// }}}
// {{{ public function getperpage ( )
/**
* GetPerPage function
*
* Returns the number of items shown per page
*
* @param void
* @return integer
*/
public function getperpage()
{
return $this->perpage;
}
// }}}
// {{{ public function getfirst ( )
/**
* GetFirst function
*
* Returns the 'count' of the first item on the page
* eg. 10 per page, page 3 = 20
*
* @param void
* @return integer
*/
public function getfirst()
{
if ($this->id != 0 && $this->change)
$this->calculatepage();
return (($this->pagenum - 1) * $this->perpage);
}
// }}}
// {{{ public function getpagecount ( )
/**
* GetPageCount function
*
* Returns the total number of pages to show this list
*
* @param void
* @return integer
*/
public function getpagecount()
{
$pagecount = ceil($this->total / $this->perpage);
if ($pagecount == 0)
// we never have '0' pages, there's always one shown!
return 1;
else
return $pagecount;
}
// }}}
// {{{ public function getpagenum ( )
/**
* GetPageNum function
*
* Returns the current page number
*
* @param void
* @return integer
*/
public function getpagenum()
{
if ($this->id != 0 && $this->change)
$this->calculatepage();
return (!$this->reversenumbers ? $this->pagenum : $this->total - $this->pagenum + 1);
}
// }}}
// {{{ public function getid ( )
/**
* GetPageCount function
*
* Returns the unique ID passed to the class, if applicable
*
* @param void
* @return integer
*/
public function getid()
{
return $this->id;
}
// }}}
// {{{ public function getlinklist ( )
/**
* GetLinkList function
*
* Returns a list of links to the different pages in the format:
* < 1 .. 4 5 6 .. 9 >
*
* @param void
* @return string
*/
public function getlinklist()
{
if (!$this->linklist && $this->change)
$this->createlinklist();
return $this->linklist;
}
// }}}
// {{{ public function getResults ( )
/**
* GetResults function
*
* Returns the slice of the array being shown on this page
*
* @param void
* @return array
*/
public function getResults()
{
return array_slice($this->result, $this->getfirst(), $this->getperpage());
}
// }}}
// {{{ private function calculatepage ( )
/**
* CalculatePage function
*
* Works out which page we should be displaying if a unique ID has been given
*
* @param void
* @return void
*/
private function calculatepage()
{
static $page = 0;
if ($page == 0)
{
$page = 1;
$count = 1;
reset($this->result);
while ( (list( , $result) = each($this->result)) )
{
if ($result[$this->idref] == $this->id)
break;
if ($count == $this->getperpage())
{
$page++;
$count = 0;
}
$count++;
}
$this->pagenum = $page;
}
}
// }}}
// {{{ private function createlinklist()
/**
* CreateLinkList function
*
* Creates the list of links for navigation
*
* @param void
* @return void
*/
private function createlinklist()
{
if ($this->id != 0)
$this->calculatepage();
$this->linklist = '';
// total number of pages
$pagenums = ceil($this->total / $this->perpage);
// set pagenum to be 1 if invalid
if (($this->pagenum < 1) || ($pagenums < $this->pagenum))
$this->pagenum = 1;
$prev = $this->pagenum - 1;
if ($prev != 0)
$this->linklist .= ' <a href="'.$this->link.$this->GET_page.'='.$prev.'"><</a> ';
$printmiddle = true;
$printlast = true;
if ($this->pagenum < 5 || $pagenums == 5)
{
$inFirstGroup = true;
$firstPrint = 1;
} else {
$inFirstGroup = false;
$this->linklist .= ' <a href="'.$this->link.$this->GET_page.'=1">'.(!$this->reversenumbers ? '1' : $this->total).'</a> ... ';
$firstPrint = $this->pagenum - 2;
}
if (($pagenums - $this->pagenum) < 4 || $pagenums == 5 )
{
$inLastGroup = true;
$lastPrint = $pagenums;
} else {
$inLastGroup = false;
$lastPrint = $this->pagenum + 2;
}
if ($this->pagenum == 1 && $pagenums != 5)
if ($pagenums < 3)
$lastPrint = $pagenums;
else
$lastPrint = 3;
if ($this->pagenum == $pagenums && $pagenums != 5)
if ($pagenums - 2 < 1)
$firstprint = 1;
else
$firstPrint = $pagenums - 2;
for ($i = $firstPrint; $i <= $lastPrint; $i++)
if ($i == $this->pagenum)
$this->linklist .= (!$this->reversenumbers ? $i : $this->total - $i + 1);
else
$this->linklist .= ' <a href="'.$this->link.$this->GET_page.'='.$i.'">'.(!$this->reversenumbers ? $i : $this->total - $i + 1).'</a> ';
if (!$inLastGroup)
$this->linklist .= ' ... <a href="'.$this->link.$this->GET_page.'='.$pagenums.'">'.(!$this->reversenumbers ? $pagenums : '1').'</a> ';
$next = $this->pagenum + 1;
if ($next <= $pagenums)
$this->linklist .= ' <a href="'.$this->link.$this->GET_page.'='.$next.'">></a> ';
$this->change = false;
}
// }}}
}
?>
|