| author | cavaliet |
| Fri, 21 Oct 2011 17:10:54 +0200 | |
| changeset 15 | 99ad73ef7385 |
| permissions | -rw-r--r-- |
|
15
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
1 |
<?php |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
2 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
3 |
/* |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
4 |
* This file is part of the Pagerfanta package. |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
5 |
* |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
6 |
* (c) Pablo Díez <pablodip@gmail.com> |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
7 |
* |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
8 |
* For the full copyright and license information, please view the LICENSE |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
9 |
* file that was distributed with this source code. |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
10 |
*/ |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
11 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
12 |
namespace Pagerfanta\View; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
13 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
14 |
use Pagerfanta\PagerfantaInterface; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
15 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
16 |
/** |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
17 |
* TwitterBootstrapView. |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
18 |
* |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
19 |
* View that can be used with the pagination module |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
20 |
* from the Twitter Bootstrap CSS Toolkit |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
21 |
* http://twitter.github.com/bootstrap/ |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
22 |
* |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
23 |
* @author Pablo Díez <pablodip@gmail.com> |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
24 |
* @author Jan Sorgalla <jsorgalla@gmail.com> |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
25 |
* |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
26 |
* @api |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
27 |
*/ |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
28 |
class TwitterBootstrapView implements ViewInterface |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
29 |
{ |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
30 |
/** |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
31 |
* {@inheritdoc} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
32 |
*/ |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
33 |
public function render(PagerfantaInterface $pagerfanta, $routeGenerator, array $options = array()) |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
34 |
{ |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
35 |
$options = array_merge(array( |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
36 |
'proximity' => 3, |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
37 |
'prev_message' => '← Previous', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
38 |
'prev_disabled_href' => '', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
39 |
'next_message' => 'Next →', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
40 |
'next_disabled_href' => '', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
41 |
'dots_message' => '…', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
42 |
'dots_href' => '', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
43 |
'css_container_class' => 'pagination', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
44 |
'css_prev_class' => 'prev', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
45 |
'css_next_class' => 'next', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
46 |
'css_disabled_class' => 'disabled', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
47 |
'css_dots_class' => 'disabled', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
48 |
'css_active_class' => 'active', |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
49 |
), $options); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
50 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
51 |
$currentPage = $pagerfanta->getCurrentPage(); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
52 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
53 |
$startPage = $currentPage - $options['proximity']; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
54 |
$endPage = $currentPage + $options['proximity']; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
55 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
56 |
if ($startPage < 1) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
57 |
$endPage = min($endPage + (1 - $startPage), $pagerfanta->getNbPages()); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
58 |
$startPage = 1; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
59 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
60 |
if ($endPage > $pagerfanta->getNbPages()) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
61 |
$startPage = max($startPage - ($endPage - $pagerfanta->getNbPages()), 1); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
62 |
$endPage = $pagerfanta->getNbPages(); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
63 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
64 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
65 |
$pages = array(); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
66 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
67 |
// previous |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
68 |
$class = $options['css_prev_class']; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
69 |
$url = $options['prev_disabled_href']; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
70 |
if (!$pagerfanta->hasPreviousPage()) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
71 |
$class .= ' '.$options['css_disabled_class']; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
72 |
} else { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
73 |
$url = $routeGenerator($pagerfanta->getPreviousPage()); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
74 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
75 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
76 |
$pages[] = sprintf('<li class="%s"><a href="%s">%s</a></li>', $class, $url, $options['prev_message']); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
77 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
78 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
79 |
// first |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
80 |
if ($startPage > 1) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
81 |
$pages[] = sprintf('<li><a href="%s">%s</a></li>', $routeGenerator(1), 1); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
82 |
if (3 == $startPage) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
83 |
$pages[] = sprintf('<li><a href="%s">%s</a></li>', $routeGenerator(2), 2); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
84 |
} elseif (2 != $startPage) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
85 |
$pages[] = sprintf('<li class="%s"><a href="%s">%s</a></li>', $options['css_dots_class'], $options['dots_href'], $options['dots_message']); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
86 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
87 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
88 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
89 |
// pages |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
90 |
for ($page = $startPage; $page <= $endPage; $page++) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
91 |
$class = ''; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
92 |
if ($page == $currentPage) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
93 |
$class = sprintf(' class="%s"', $options['css_active_class']); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
94 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
95 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
96 |
$pages[] = sprintf('<li%s><a href="%s">%s</a></li>', $class, $routeGenerator($page), $page); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
97 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
98 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
99 |
// last |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
100 |
if ($pagerfanta->getNbPages() > $endPage) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
101 |
if ($pagerfanta->getNbPages() > ($endPage + 1)) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
102 |
if ($pagerfanta->getNbPages() > ($endPage + 2)) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
103 |
$pages[] = sprintf('<li class="%s"><a href="%s">%s</a></li>', $options['css_dots_class'], $options['dots_href'], $options['dots_message']); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
104 |
} else { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
105 |
$pages[] = sprintf('<li><a href="%s">%s</a></li>', $routeGenerator($endPage + 1), $endPage + 1); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
106 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
107 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
108 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
109 |
$pages[] = sprintf('<li><a href="%s">%s</a></li>', $routeGenerator($pagerfanta->getNbPages()), $pagerfanta->getNbPages()); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
110 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
111 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
112 |
// next |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
113 |
$class = $options['css_next_class']; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
114 |
$url = $options['next_disabled_href']; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
115 |
if (!$pagerfanta->hasNextPage()) { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
116 |
$class .= ' '.$options['css_disabled_class']; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
117 |
} else { |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
118 |
$url = $routeGenerator($pagerfanta->getNextPage()); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
119 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
120 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
121 |
$pages[] = sprintf('<li class="%s"><a href="%s">%s</a></li>', $class, $url, $options['next_message']); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
122 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
123 |
return sprintf('<div class="%s"><ul>%s</ul></div>', $options['css_container_class'], implode('', $pages)); |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
124 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
125 |
|
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
126 |
/** |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
127 |
* {@inheritdoc} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
128 |
*/ |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
129 |
public function getName() |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
130 |
{ |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
131 |
return 'twitter_bootstrap'; |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
132 |
} |
|
99ad73ef7385
first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff
changeset
|
133 |
} |