diff --git a/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php b/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php index 811e44a..46a4071 100644 --- a/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php +++ b/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php @@ -3,6 +3,7 @@ namespace Drupal\core_search_facets\Plugin\facets\facet_source; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Url; use Drupal\core_search_facets\Plugin\CoreSearchFacetSourceInterface; use Drupal\facets\FacetInterface; use Drupal\facets\FacetSource\FacetSourcePluginBase; @@ -110,9 +111,9 @@ class CoreNodeSearchFacetSource extends FacetSourcePluginBase implements CoreSea public function getPath() { $search_page = $this->request->attributes->get('entity'); if ($search_page instanceof SearchPageInterface) { - return '/search/' . $search_page->getPath(); + return Url::fromUserInput('/search/' . $search_page->getPath()); } - return '/'; + return Url::fromUserInput('/'); } /** diff --git a/src/FacetSource/FacetSourcePluginInterface.php b/src/FacetSource/FacetSourcePluginInterface.php index 33fc849..b089b35 100644 --- a/src/FacetSource/FacetSourcePluginInterface.php +++ b/src/FacetSource/FacetSourcePluginInterface.php @@ -40,10 +40,10 @@ interface FacetSourcePluginInterface extends PluginFormInterface, DependentPlugi public function getQueryTypesForFacet(FacetInterface $facet); /** - * Returns the path where a facet should link to. + * Returns the url of the facet source, used to build the facet url. * - * @return string - * The path of the facet. + * @return \Drupal\Core\Url|NULL + * The path of the facet if it's set, Null if no path can be created. */ public function getPath(); diff --git a/src/Plugin/facets/facet_source/SearchApiFacetSource.php b/src/Plugin/facets/facet_source/SearchApiFacetSource.php index 9e1255c..69d4e2b 100644 --- a/src/Plugin/facets/facet_source/SearchApiFacetSource.php +++ b/src/Plugin/facets/facet_source/SearchApiFacetSource.php @@ -122,12 +122,7 @@ class SearchApiFacetSource extends FacetSourcePluginBase { * {@inheritdoc} */ public function getPath() { - $url = $this->getDisplay()->getUrl(); - if ($url === NULL) { - // @todo Return the current page URL instead? - return NULL; - } - return '/' . $url->toString(); + return $this->getDisplay()->getUrl(); } /** diff --git a/src/Plugin/facets/url_processor/QueryString.php b/src/Plugin/facets/url_processor/QueryString.php index cd5aafa..6831e73 100644 --- a/src/Plugin/facets/url_processor/QueryString.php +++ b/src/Plugin/facets/url_processor/QueryString.php @@ -68,8 +68,12 @@ class QueryString extends UrlProcessorPluginBase { // Set the url alias from the the facet object. $this->urlAlias = $facet->getUrlAlias(); - $path = str_replace('//', '/', $facet->getFacetSource()->getPath()); - $url = Url::fromUserInput($path); + if ($facet->getFacetSource()->getPath() instanceof Url) { + $url = $facet->getFacetSource()->getPath(); + } + else { + $url = Url::createFromRequest($this->request); + } $url->setOption('attributes', ['rel' => 'nofollow']); /** @var \Drupal\facets\Result\ResultInterface[] $results */ diff --git a/tests/src/Unit/Plugin/url_processor/QueryStringTest.php b/tests/src/Unit/Plugin/url_processor/QueryStringTest.php index 78e4102..40019f8 100644 --- a/tests/src/Unit/Plugin/url_processor/QueryStringTest.php +++ b/tests/src/Unit/Plugin/url_processor/QueryStringTest.php @@ -147,7 +147,7 @@ class QueryStringTest extends UnitTestCase { /** @var \Drupal\facets\Result\ResultInterface $r */ foreach ($results as $r) { $this->assertInstanceOf('\Drupal\facets\Result\ResultInterface', $r); - $this->assertEquals('base:search/test?f[0]=test%3A' . $r->getRawValue(), $r->getUrl()->toUriString()); + $this->assertEquals('route:test?f[0]=test%3A' . $r->getRawValue(), $r->getUrl()->toUriString()); } } @@ -173,10 +173,10 @@ class QueryStringTest extends UnitTestCase { foreach ($results as $k => $r) { $this->assertInstanceOf('\Drupal\facets\Result\ResultInterface', $r); if ($k === 2) { - $this->assertEquals('base:search/test?f[0]=king%3Akong', $r->getUrl()->toUriString()); + $this->assertEquals('route:test?f[0]=king%3Akong', $r->getUrl()->toUriString()); } else { - $this->assertEquals('base:search/test?f[0]=king%3Akong&f[1]=test%3A' . $r->getRawValue(), $r->getUrl()->toUriString()); + $this->assertEquals('route:test?f[0]=king%3Akong&f[1]=test%3A' . $r->getRawValue(), $r->getUrl()->toUriString()); } } } @@ -217,7 +217,7 @@ class QueryStringTest extends UnitTestCase { /** @var \Drupal\facets\Result\ResultInterface $r */ foreach ($results as $r) { $this->assertInstanceOf('\Drupal\facets\Result\ResultInterface', $r); - $this->assertEquals('base:search/test?ab[0]=test%3A' . $r->getRawValue(), $r->getUrl()->toUriString()); + $this->assertEquals('route:test?ab[0]=test%3A' . $r->getRawValue(), $r->getUrl()->toUriString()); } }