Drupal 9 + Facet + Sorting

Сьогоднішня проблема - це веб-сайт на Drupal 9 із пошуковиком за допомогою фасетного пошуку, де потрібно додати додаткове сортування до Views.

Проблема полягає в тому, що за замовчуванням, якщо ви застосуєте створене сортування, URL сторінки зміниться і скине використані фільтри за допомогою фасетів. Щоб уникнути цього, ось наступний патч:

diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index b82f36d4a5..291c95a5ae 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -669,6 +669,39 @@ function views_form_views_exposed_form_alter(&$form, FormStateInterface $form_st
   $form['form_build_id']['#access'] = FALSE;
   $form['form_token']['#access'] = FALSE;
   $form['form_id']['#access'] = FALSE;
+  if (\Drupal::moduleHandler()->moduleExists('facets_pretty_paths')) {
+    $current_path = \Drupal::request()->getRequestUri();
+    $current_route_name = \Drupal::service('current_route_match')->getRouteName();
+    if ($current_route_name) {
+      $form['#action'] = $current_path;
+    }
+  }
+  else {
+    // Check if this form is a Search API form. This could be replaced with the
+    // value of a custom Views setting like e.g. "Include facets".
+    if ($view = $form_state->getStorage()['view']) {
+
+      if (substr(key($form_state->getStorage()['view']->getBaseTables()), 0, 17) === 'search_api_index_') {
+
+        if (\Drupal::moduleHandler()->moduleExists('facets')) {
+          // Get query parameters.
+          $query_parameters = Drupal::request()->query->all();
+          // If any facet query parameters are provided.
+          if (!empty($query_parameters['f'])) {
+            // Iterate through facet query parameters.
+            foreach ($query_parameters['f'] as $key => $value) {
+              // Add hidden form field for facet parameter.
+              $form['f[' . $key . ']'] = [
+                '#type' => 'hidden',
+                '#value' => $value,
+                '#weight' => -1,
+              ];
+            }
+          }
+        }
+      }
+    }
+  }
 }
 
 /**

Тепер можливо застосовувати сортування на будь-якій сторінці з фільтром.

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.
Код мови коментаря.