/** * Builds and returns the pagination array. * * @access public * @return array */ public function pagination() { if (empty($this->pagination)) { if (empty($this->request)) { throw new RuntimeException(vsprintf("%s(): A [ Request ] instance is required to generate the pagination array.", [__METHOD__])); } if (empty($this->urlBuilder)) { throw new RuntimeException(vsprintf("%s(): A [ URLBuilder ] instance is required to generate the pagination array.", [__METHOD__])); } $pagination = ['items' => $this->items, 'items_per_page' => $this->itemsPerPage, 'number_of_pages' => $this->pages]; $params = $this->request->get(); if ($this->currentPage > 1) { $pagination['first'] = $this->urlBuilder->current(array_merge($params, [$this->options['page_key'] => 1])); $pagination['previous'] = $this->urlBuilder->current(array_merge($params, [$this->options['page_key'] => $this->currentPage - 1])); } if ($this->currentPage < $this->pages) { $pagination['last'] = $this->urlBuilder->current(array_merge($params, [$this->options['page_key'] => $this->pages])); $pagination['next'] = $this->urlBuilder->current(array_merge($params, [$this->options['page_key'] => $this->currentPage + 1])); } if ($this->options['max_page_links'] !== 0) { if ($this->pages > $this->options['max_page_links']) { $start = max($this->currentPage - ceil($this->options['max_page_links'] / 2), 0); $end = $start + $this->options['max_page_links']; if ($end > $this->pages) { $end = $this->pages; } if ($start > $end - $this->options['max_page_links']) { $start = $end - $this->options['max_page_links']; } } else { $start = 0; $end = $this->pages; } $pagination['pages'] = []; for ($i = $start + 1; $i <= $end; $i++) { $pagination['pages'][] = ['url' => $this->urlBuilder->current(array_merge($params, [$this->options['page_key'] => $i])), 'number' => $i, 'is_current' => $i == $this->currentPage]; } } $this->pagination = $pagination; } return $this->pagination; }
/** * */ public function testToCurrentWithQueryParams() { $request = $this->getRequest(); $request->shouldReceive('get')->once()->andReturn(['foo' => 'bar']); $urlBuilder = new URLBuilder($request, $this->getRoutes(), true); $this->assertEquals('http://example.org/foo/bar?foo=bar', $urlBuilder->current()); $this->assertEquals('http://example.org/foo/bar?bar=foo', $urlBuilder->current(['bar' => 'foo'])); }