diff --git a/src/Plugin/facets/url_processor/QueryString.php b/src/Plugin/facets/url_processor/QueryString.php index 3867f1e..059d19d 100644 --- a/src/Plugin/facets/url_processor/QueryString.php +++ b/src/Plugin/facets/url_processor/QueryString.php @@ -38,6 +38,10 @@ class QueryString extends UrlProcessorPluginBase { * {@inheritdoc} */ public function buildUrls(FacetInterface $facet, array $results) { + static $requestsByPath = []; + static $requestUrlByPath = []; + static $routeParameters; + // No results are found for this facet, so don't try to create urls. if (empty($results)) { return []; @@ -57,18 +61,33 @@ class QueryString extends UrlProcessorPluginBase { $this->urlAlias = $facet->getUrlAlias(); $request = $this->request; - if ($facet->getFacetSource()->getPath()) { - $request = Request::create($facet->getFacetSource()->getPath()); - $request->attributes->set('_format', $this->request->get('_format')); + $facet_source_path = $facet->getFacetSource()->getPath(); + if ($facet_source_path) { + if (isset($requestsByPath[$facet_source_path])) { + $request = $requestsByPath[$facet_source_path]; + } + else { + $request = Request::create($facet_source_path); + $request->attributes->set('_format', $this->request->get('_format')); + $requestsByPath[$facet_source_path] = $request; + } } - // Grab any route params from the original request. - $routeParameters = Url::createFromRequest($this->request) - ->getRouteParameters(); + if (!$routeParameters) { + // Grab any route params from the original request. + $routeParameters = Url::createFromRequest($this->request) + ->getRouteParameters(); + } - // Create a request url. - $requestUrl = Url::createFromRequest($request); - $requestUrl->setOption('attributes', ['rel' => 'nofollow']); + if (array_key_exists($facet_source_path, $requestUrlByPath)) { + $requestUrl = $requestUrlByPath[$facet_source_path]; + } + else { + // Create a request url. + $requestUrl = Url::createFromRequest($request); + $requestUrl->setOption('attributes', ['rel' => 'nofollow']); + $requestUrlByPath[$facet_source_path] = $requestUrl; + } /** @var \Drupal\facets\Result\ResultInterface[] $results */ foreach ($results as &$result) {