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

Главные вкладки

Аватар пользователя vkapas vkapas 11 сентября 2014 в 5:23

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

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

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

Комментарии

Аватар пользователя vkapas vkapas 11 сентября 2014 в 13:21

В 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 12 сентября 2014 в 7:09

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

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.