forked from sergeychernyshev/showslow
-
Notifications
You must be signed in to change notification settings - Fork 0
/
paginator.class.php
96 lines (87 loc) · 3.12 KB
/
paginator.class.php
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
<?php
class Paginator{
var $items_per_page;
var $items_total;
var $current_page;
var $num_pages;
var $mid_range;
var $return;
var $default_ipp = 50;
var $querystring;
function Paginator()
{
$this->current_page = 1;
$this->mid_range = 7;
$this->items_per_page = $this->default_ipp;
}
function paginate($base)
{
$this->num_pages = ceil($this->items_total/$this->items_per_page);
$this->current_page = isset($_GET['page']) ? (int) $_GET['page'] : 1; // must be numeric > 0
if($this->current_page < 1 Or !is_numeric($this->current_page)) $this->current_page = 1;
if($this->current_page > $this->num_pages) $this->current_page = $this->num_pages;
$prev_page = $this->current_page-1;
$next_page = $this->current_page+1;
if($_GET)
{
foreach($_GET as $key => $value)
{
if ($key != "page") {
$this->querystring .= '&' . urlencode($key) . '=' . urlencode($value);
}
}
}
if($this->num_pages > 10)
{
$this->return = ($this->current_page != 1 And $this->items_total >= 10)
? '<a class="paginate" href="' . htmlentities($base) .
'?page='.urlencode($prev_page) .
$this->querystring . '">« Previous</a> '
: '<span class="inactive" href="#">« Previous</span> ';
$this->start_range = $this->current_page - floor($this->mid_range/2);
$this->end_range = $this->current_page + floor($this->mid_range/2);
if($this->start_range <= 0)
{
$this->end_range += abs($this->start_range)+1;
$this->start_range = 1;
}
if($this->end_range > $this->num_pages)
{
$this->start_range -= $this->end_range-$this->num_pages;
$this->end_range = $this->num_pages;
}
$this->range = range($this->start_range,$this->end_range);
for($i=1;$i<=$this->num_pages;$i++)
{
if($this->range[0] > 2 And $i == $this->range[0]) $this->return .= " ... ";
// loop through all pages. if first, last, or in range, display
if($i==1 Or $i==$this->num_pages Or in_array($i,$this->range))
{
$this->return .= ($i == $this->current_page
? '<a title="Go to page '.htmlentities($i).' of $this->num_pages" class="current" href="#">'.htmlentities($i).'</a> '
: '<a class="paginate" title="Go to page '.htmlentities($i).' of '.htmlentities($this->num_pages).'" href="'.$base.'?page='.htmlentities($i).$this->querystring.'">'.htmlentities($i).'</a> ');
}
if($this->range[$this->mid_range-1] < $this->num_pages-1 And $i == $this->range[$this->mid_range-1]) $this->return .= " ... ";
}
$this->return .= (($this->current_page != $this->num_pages And $this->items_total >= 10))
? '<a class="paginate" href="'.$base.'?page='.htmlentities($next_page).$this->querystring.'">Next »</a>'."\n"
: '<span class="inactive" href="#">» Next</span>'."\n";
}
else
{
for($i=1;$i<=$this->num_pages;$i++)
{
$this->return .= ($i == $this->current_page)
? '<a class="current" href="#">'.htmlentities($i).'</a> '
: '<a class="paginate" href="'.$base.'?page='.htmlentities($i).$this->querystring.'">'.htmlentities($i).'</a> ';
}
}
}
function display_pages()
{
if ($this->num_pages <= 1) {
return '';
}
return $this->return;
}
}