From 6e9a18c0ae3298bd8f5bf767e147f74ee3397878 Mon Sep 17 00:00:00 2001 From: Marcin Kurczewski Date: Fri, 22 Nov 2013 08:52:24 +0100 Subject: [PATCH] Paginator: introducing "..." pseudo-pages If delta between pages in paginator is greater than 2, it adds "..." inbetween. If delta is equal to 2, it adds missing page link instead. Examples: 1,4,5 gets converted to 1,...,4,5 1,3,4 gets converted to 1,2,3,4 --- public_html/media/css/paginator.css | 2 +- src/Views/paginator.phtml | 81 +++++++++++++++++------------ 2 files changed, 50 insertions(+), 33 deletions(-) diff --git a/public_html/media/css/paginator.css b/public_html/media/css/paginator.css index 140daa3a..b5c04441 100644 --- a/public_html/media/css/paginator.css +++ b/public_html/media/css/paginator.css @@ -10,12 +10,12 @@ .paginator li { display: inline-block; + margin-right: 0.5em; } .paginator li a { display: inline-block; padding: 0.2em 0.5em; - margin-right: 0.5em; background: #eee; border: 1px solid silver; color: black; diff --git a/src/Views/paginator.phtml b/src/Views/paginator.phtml index ad35bae3..b4df0eed 100644 --- a/src/Views/paginator.phtml +++ b/src/Views/paginator.phtml @@ -1,60 +1,77 @@ context->transport->paginator->pageCount; - $delta = 3; - $pagesVisible = array_merge($pagesVisible, range($this->context->transport->paginator->page - $delta, $this->context->transport->paginator->page + $delta)); - $pagesVisible = array_filter($pagesVisible, function($x) { return $x >= 1 and $x <= $this->context->transport->paginator->pageCount; }); - $pagesVisible = array_unique($pagesVisible); - sort($pagesVisible, SORT_NUMERIC); +$page = $this->context->transport->paginator->page; +$pageCount = $this->context->transport->paginator->pageCount; - if (!function_exists('pageUrl')) +$delta = 3; +$pagesVisible = [1, $pageCount]; +$pagesVisible = array_merge($pagesVisible, range($page - $delta, $page + $delta)); +$pagesVisible = array_filter($pagesVisible, function($x) use ($pageCount) { return $x >= 1 and $x <= $pageCount; }); +$pagesVisible = array_unique($pagesVisible); +sort($pagesVisible, SORT_NUMERIC); + +$finalPages = [$pagesVisible[0]]; +for ($i = 1; $i < count($pagesVisible); $i ++) +{ + $prevPage = $pagesVisible[$i - 1]; + $subPage = $pagesVisible[$i]; + if ($subPage - $prevPage == 2) + $finalPages []= $subPage - 1; + elseif ($subPage - $prevPage > 2) + $finalPages []= null; + $finalPages []= $subPage; +} +$pagesVisible = $finalPages; + +if (!function_exists('pageUrl')) +{ + function pageUrl($page) { - function pageUrl($page) - { - $context = \Chibi\Registry::getContext(); - $controller = $context->route->simpleControllerName; - $action = $context->route->simpleActionName; - $page = max(1, $page); - $page = min($context->transport->paginator->pageCount, $page); - $params = $context->route->arguments; - $params['page'] = $page; - return \Chibi\UrlHelper::route($controller, $action, $params); - } + $context = \Chibi\Registry::getContext(); + $controller = $context->route->simpleControllerName; + $action = $context->route->simpleActionName; + $page = max(1, min($context->transport->paginator->pageCount, $page)); + $params = $context->route->arguments; + $params['page'] = $page; + return \Chibi\UrlHelper::route($controller, $action, $params); } +} ?>