public function CoreViewsUrlProcessor::buildUrls in Core Views Facets 8
Adds urls to the results.
Parameters
\Drupal\facets\FacetInterface $facet: The facet.
\Drupal\facets\Result\ResultInterface[] $results: An array of results.
Return value
\Drupal\facets\Result\ResultInterface[] An array of results with added urls.
Overrides UrlProcessorInterface::buildUrls
File
- src/
Plugin/ facets/ url_processor/ CoreViewsUrlProcessor.php, line 94
Class
- CoreViewsUrlProcessor
- A url processor for views exposed filters.
Namespace
Drupal\core_views_facets\Plugin\facets\url_processorCode
public function buildUrls(FacetInterface $facet, array $results) {
// No results are found for this facet, so don't try to create urls.
if (empty($results)) {
return [];
}
$source = $facet
->getFacetSource();
if ($source instanceof CoreViewsExposedFilter || $source instanceof CoreViewsContextualFilter) {
$map = $source
->getViewsArgumentsMap();
// Load the view.
/** @var \Drupal\views\ViewEntityInterface $view */
$view = $this->storage
->load($source->pluginDefinition['view_id']);
$this->currentView = $this->executableFactory
->get($view);
$this->currentView
->setDisplay($source->pluginDefinition['view_display']);
switch (TRUE) {
case $source instanceof CoreViewsExposedFilter:
// First get the current list of get parameters.
$get_params = $this->request->query;
$views_filter = $source
->getViewsFilterDefinition($facet
->getFieldIdentifier());
$views_filter_parameter = empty($views_filter['expose']) ? $facet
->getFieldIdentifier() : $views_filter['expose']['identifier'];
/** @var \Drupal\facets\Result\ResultInterface $result */
foreach ($results as &$result) {
$result_get_params = clone $get_params;
$active_values = $result_get_params
->get($views_filter_parameter, $views_filter['expose']['multiple'] ? [] : '');
// If the value is active, remove the filter string from parameters.
if ($result
->isActive()) {
if ($views_filter['expose']['multiple']) {
if (($key = array_search($result
->getRawValue(), $active_values)) !== FALSE) {
unset($active_values[$key]);
}
}
else {
if ($active_values == $result
->getRawValue()) {
$active_values = '';
}
}
}
else {
if ($views_filter['expose']['multiple']) {
$active_values = [
$result
->getRawValue(),
];
}
else {
$active_values = $result
->getRawValue();
}
}
if ($active_values || $active_values == '0') {
$result_get_params
->set($views_filter_parameter, $active_values);
}
else {
$result_get_params
->remove($views_filter_parameter);
}
$request_arguments = [];
foreach ($map as $views_argument_id => $current_argument) {
$request_arguments[] = $current_argument['value'];
}
$url = $this->currentView
->getUrl($request_arguments);
// Add existing additional parameters, except pager.
$additional_parameters = $result_get_params
->all();
unset($additional_parameters['page'], $additional_parameters['ajax_page_state'], $additional_parameters['_wrapper_format']);
$url
->setOption('query', $additional_parameters);
$result
->setUrl($url);
}
return $results;
case $source instanceof CoreViewsContextualFilter:
/** @var \Drupal\facets\Result\ResultInterface $result */
foreach ($results as &$result) {
$request_arguments = [];
foreach ($map as $views_argument_id => $current_argument) {
if ($views_argument_id == $facet
->getFieldIdentifier()) {
$request_arguments[] = $result
->isActive() ? $current_argument['neutral_value'] : $result
->getRawValue();
}
else {
$request_arguments[] = $current_argument['value'];
}
}
$url = $this->currentView
->getUrl($request_arguments);
// Add existing additional parameters, except pager.
$additional_parameters = $this->request->query
->all();
unset($additional_parameters['page'], $additional_parameters['ajax_page_state'], $additional_parameters['_wrapper_format']);
$url
->setOption('query', $additional_parameters);
$result
->setUrl($url);
}
return $results;
default:
return [];
}
}
return [];
}