Как совместить просмотренный фильтр просмотров с поиском?

18

Мой клиент спросил меня об одном поле, которое будет работать 2 способами:

  • Фильтр автозаполнения на основе таксономии.
  • Если посетитель сайта вводит что-то, что не относится к таксономии, следует выполнить полнотекстовый поиск по телу контента и отобразить соответствующее информационное сообщение.

Таким образом, если пользователь вводит имя категории, он получает список узлов, выбранных вручную, и, если что-то еще, он, по крайней мере, получает некоторый контент.

Отдельно это легко. Но как совместить это поведение в одной области?

МОЛОТ
источник
1
Отдельно легко, с каким модулем вы работаете, чтобы иметь автоматическое заполнение на основе таксономии? Для меня хитрость будет в небольшом javascript-коде, который проверит, нет ли результата, измените действие кнопки отправки, поэтому он будет перенаправлен в / search / yourkeywordsearch
sel_space

Ответы:

17

Модуль Finder точно выполнит ваши требования. Вы можете выбрать термин таксономии, а также название узла, тело, поля и т. Д. Для выполнения поиска.

Есть много способов собрать функциональность поиска, чтобы получить нужную форму поиска. Есть также много хуков и функций тем, позволяющих полностью настроить вывод искателя.

Используется для этих целей:

As a search tool to find a group of nodes or users.
As a way to navigate to a specific node or user page that matches criteria.
As an alternative to exposed filters for a Views module display.

См. Снимок экрана ниже. В поле поиска вы можете выбрать термины таксономии, а также тело узла, чтобы выполнить поиск в поле автозаполнения, даже если вы можете выполнять поиск по нескольким ключевым словам через запятую. Прочитайте документацию Finder для получения дополнительной информации.

введите описание изображения здесь

После добавления элемента вы можете выбрать поля поиска из списка, удерживая

Клавиша Ctrl для выбора термина таксономии, а также Node: Body

Bala
источник
Это немного старое и нуждается в помощниках, но похоже, что оно удовлетворяет все мои потребности. Нужно будет проверить это, но пока это, кажется, идеальный ответ для моего варианта использования.
Молот
Кажется, это работает. Мне нужно немного его настроить, но он справится с работой.
Молот
3

Я пишу без тестирования, но у меня есть ощущение, что вы можете использовать его хотя бы в качестве отправной точки.

Используя модуль View Field View , вы можете встроить представление в другое представление, а также передать контекстный фильтр во встроенное представление.

В вашем случае, я бы создал еще одно представление, которое имеет контекстный фильтр, который ищет данный фильтр. Я не уверен в этом, если вы можете сделать поиск через контекстные фильтры, но я видел некоторые варианты, такие как «Поиск: термин» и т. Д.

Сказав это, если вы можете сделать этот первый шаг в любом случае, все остальное относительно просто.

В исходном представлении вы добавляете «Поведение без результатов» в разделе расширенных параметров, добавляете «Глобальное представление: представление (представление поля представления)» и выбираете ранее созданное представление, а затем передаете маркер для открытого фильтра как контекстный фильтр для встроенного представления (вы можете найти токены в списке для шаблонов замены).

Елин Й.
источник
1
Интересная идея, но я не мог заставить ее работать. Много настроек, а затем Бала выложил готовый модуль, и я упал духом.
Молот
Да, я не знал о модуле Finder . Я думаю, что буду использовать это и в своих проектах. Я был бы рад, если вы сообщите нам с комментарием, если Finder сделает то, что вы ожидаете.
Елин Й.
3

Я прошел вышеупомянутые обсуждения и, возможно, нижеприведенный сценарий может затронуть пост «Как объединить открытый фильтр просмотров с поиском?». Реализация потребует некоторого пользовательского кодирования.

  1. Рассмотрите URL http://www.seedandspark.com/studio .
  2. Здесь, слева, у вас есть форма поиска. Это пользовательская форма ( form_id = 'sns_studio_form_filter').
  3. В области контента у нас есть около 7-8 блоков просмотра и все генерирующие динамическую информацию (только для анонимных пользователей 3 блока)
  4. Теперь мы выставили фильтры, включенные для каждого блока просмотра.
  5. Мы оставили эти открытые фильтры скрытыми
  6. Мы сохранили примечание о структурах URL, когда мы используем открытые фильтры вида
  7. В нашем обработчике отправки пользовательской формы мы берем информацию из полей пользовательской формы и генерируем URL-адрес, аналогичный указанному на шаге 6. И, наконец, мы перенаправляем на этот URL-адрес. Это будет так в обработчике отправки ::

    $form_state ['redirect'] = array(
      $path, 
      array(
        'query' => $params // $params is the url
      )
    );
    drupal_redirect_form( $form_state );

Итак, теперь после выполнения шага 7 все блоки просмотра будут отфильтрованы на основе установленных вами критериев фильтрации.

Надеюсь, это поможет.

dhrubaj
источник
3

Есть и другой способ сделать это: вы можете попробовать модуль Concat Field . Вы в основном добавляете поле к типам контента, а затем можете использовать фильтр по этому полю в качестве поиска.

Я согласен, что это похоже на Finder, но, думаю, все же стоит упомянуть.

32i
источник