/** * @return array w/ pagination links */ protected function doRender() { $pagination = $this->getPayload('subject'); $current_page_url = $this->url_generator->generateUrl(null); $url_parameters = ArrayToolkit::getUrlQueryInRequestFormat($current_page_url); unset($url_parameters['offset']); // offset is not needed when page is used (see validator) $current_page_url = $this->url_generator->generateUrl(null, $url_parameters); $curie = $this->getOption('curie'); $translation_domain = $this->getOption('translation_domain', 'application.ui'); $links = ['self' => ['href' => $current_page_url]]; if (!$pagination->isFirstPage()) { $links['first'] = ['href' => $this->url_generator->generateUrl(null, array_merge($url_parameters, ['offset' => 0])), 'title' => $this->translator->translate('pager.first_page.title', $translation_domain)]; } if ($pagination->hasPrevPage()) { $links['prev'] = ['href' => $this->url_generator->generateUrl(null, array_merge($url_parameters, ['offset' => $pagination->getPrevPageOffset()])), 'title' => $this->translator->translate('pager.prev_page.title', $translation_domain)]; } if ($pagination->hasNextPage()) { $links['next'] = ['href' => $this->url_generator->generateUrl(null, array_merge($url_parameters, ['offset' => $pagination->getNextPageOffset()])), 'title' => $this->translator->translate('pager.next_page.title', $translation_domain)]; } if (!$pagination->isLastPage()) { $links['last'] = ['href' => $this->url_generator->generateUrl(null, array_merge($url_parameters, ['offset' => $pagination->getLastPageOffset()])), 'title' => $this->translator->translate('pager.last_page.title', $translation_domain)]; } if ($pagination->getNumberOfPages() > 1) { $link_name = empty($curie) ? 'jumpToPage' : $curie . ':jumpToPage'; $links[$link_name] = ['href' => $this->url_generator->generateUrl(null), 'templated' => true, 'title' => $this->translator->translate('pager.jump_to_page.title', $translation_domain)]; } return $links; }
protected function getTemplateParameters() { $params = parent::getTemplateParameters(); $pagination = $this->getPayload('subject'); $params = array_merge($params, $pagination->toArray()); $current_page_url = $this->url_generator->generateUrl(null); $current_url_parameters = ArrayToolkit::getUrlQueryInRequestFormat($current_page_url); unset($current_url_parameters['offset']); // offset is not needed when page is used (see validator) $url_parameters = (array) $this->getOption('url_parameters', []); $url_parameters = array_merge($current_url_parameters, $url_parameters); // we add all query parameters of the current URL as hidden GET form inputs to not lose any state on submit $params['url_parameters'] = $url_parameters; $params['current_page_url'] = $this->url_generator->generateUrl(null, $url_parameters); $params['first_page_url'] = $this->url_generator->generateUrl(null, array_merge($url_parameters, ['offset' => 0])); $params['last_page_url'] = $this->url_generator->generateUrl(null, array_merge($url_parameters, ['offset' => $pagination->getLastPageOffset()])); $params['next_page_url'] = $this->url_generator->generateUrl(null, array_merge($url_parameters, ['offset' => $pagination->getNextPageOffset()])); $params['prev_page_url'] = $this->url_generator->generateUrl(null, array_merge($url_parameters, ['offset' => $pagination->getPrevPageOffset()])); $params['number_of_pages'] = $pagination->getNumberOfPages(); return $params; }
public function testGetUrlQueryInRequestFormat() { $this->assertEquals(["limit" => 2, "foo[0]" => 1, "foo[1]" => 2, "foo[2]" => 3], ArrayToolkit::getUrlQueryInRequestFormat('http://some.tld?limit=2&foo[0]=1&foo[1]=2&foo[2]=3')); }