/** * {@inheritdoc} */ public function create(Listing $listing) { $page = $listing->page(); $pages = $listing->pagesCount(); $links = ['prev' => null, 'next' => null, 'current' => $listing->page(), 'pages' => []]; if (!$pages) { return $links; } if ($page > 1) { $links['prev'] = $listing->getPageUrl($page - 1); } if ($page < $pages) { $links['next'] = $listing->getPageUrl($page + 1); } // first and last always $links['pages'][1] = $listing->getPageUrl(1); $from = max($page - $this->back - 1, 2); $to = min($page + $this->forward + 1, $pages - 1); for ($i = $from; $i <= $to; $i++) { if ($i != 2 && $i != $pages - 1 && ($i == $page - $this->back - 1 || $i == $page + $this->forward + 1)) { // placeholders $links['pages'][$i] = null; } else { $links['pages'][$i] = $listing->getPageUrl($i); } } $links['pages'][$pages] = $listing->getPageUrl($pages); return $links; }