Простой способ сортировки результатов поиска по полю... есть ли?

Аватар пользователя vkapas

Есть сайт, где публикуются события, каждое из которых имеет свою дату (реализовано с помощью  Date). И на этом же сайте есть поиск, в результатах которого очень важно показывать сначала ближайшие события, т.е. сортируя их по убыванию (сейчас материалы в поиске выводятся хаотично).

Я уже немного темизировал поиск с помощью  Display Suite и думал, что вот сейчас осталось только добавить несложную сортировочку, но... прилично погуглив, так и не смог найти простого решения, без ворочения всяких там Apache Solr или применения  Views.

Существует ли простой способ решения моей задачи?

Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя Nikit
Nikit 3 года назад

То есть используете стандартный друпаловский поисковик?

Аватар пользователя vkapas
vkapas 3 года назад

В admin/config/search/settings в «Модуль по умолчанию для поиска» выбран Display Suite Search, а в admin/structure/ds/list/search выбрана «Поисковая система» Node.

Видимо, это значит, что да, поиск стандартный :-).

В процессе поиска решения я попробовал реализовать сортировку с помощью  Search API +  Search API Database Search +  Search API sorts, настроив в итоге нужную сортировку, но всё это я не смог заставить работать с текущим поиском. Как я понял, для этого нужно, опять же, воротить Search Pages, что для моей простой задачи я считаю излишним.

Аватар пользователя Nikit
Nikit 3 года назад

Вот набросал, нужно отладить:

function MYMODULENAME_query_alter(&$query) {
  $is_search = FALSE;
  foreach ($query->getTables() as $table) {
    if ($table['table'] == 'search_index') {
      $is_search = TRUE;
    }
  }

  if ($is_search) {
    $query->condition('n.created', time(), '>=')
    $query->orderby = array(
      array(
        'field' => 'n.created',
        'direction' => 'ASC',
      )
    );
  }
}

Но рекомендую Views + Search API.