Как реализовать поиск по нескольким полям, ограниченным одним типом контента в drupal 7
Я создал новый тип контента, в котором есть несколько полей (некоторые из них являются пользовательскими полями, которые я создал сам). Теперь мне нужно реализовать функцию поиска по каждому из этих полей.
Это означает, что если у меня есть эти поля:
- ВИДЕОКВ (поле видео)
- Профессия (текстовое поле)
- Водительские права (списки выбора)
- Регион рождения (термин таксономии)
Мне нужен модуль поиска с этими четырьмя полями, чтобы при поиске для профессии "инженер" он ищет только данные, введенные в это конкретное поле.
Что мне нужно сделать? Какие дополнительные модули мне следует установить? Что мне делать с моими пользовательскими полями?
6 answers
Если вам нужно получить доступ к узлам в коде, решение delmi должно работать.
Если вы хотите использовать существующие модули, представления должны сделать свое дело. Я нашел видеоуроки NodeOne по просмотру очень полезными: http://dev.nodeone.se/node/781
Я не эксперт по D7, но я могу попробовать с помощью запроса entityfield, подобного этому:
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'YOUR_CONTENT_TYPE_NAME')
->propertyCondition('status', 1)
->fieldCondition('YOUR_FIELD_NAME', 'value', $searchterm)
// other conditions...
->propertyOrderBy('title')
->execute();
$nodes = entity_load('node', array_keys($entities['node']));
Интересно, помогут ли вам Представления и Более открытые фильтры ? Создайте представление страницы, предоставьте свои фильтры полей, затем в столбце "Дополнительно" появится возможность отображать открытые фильтры в структуре > блоки.
Создайте представление вашего типа контента и добавьте все поля, которые вы хотите найти, в качестве доступных фильтров. Это создает форму поиска с элементами ввода для всех отфильтрованных полей (или только для одного, если это то, что вы хотите). Вы можете настроить его так, чтобы он фильтровал только заполненные поля ввода и игнорировал остальные.
Это позволяет вам разместить форму поиска в верхней части вашего представления или переместить ее в отдельный блок.
Используйте модуль Finder для создания поиска по конкретным полям (основной поиск Drupal - это полнотекстовый поиск, а не поиск по конкретным полям). Вот выдержка об этом со страницы проекта модуля:
... позволяет администраторам сайтов Drupal создавать гибкие фасетные формы поиска для поиска объектов, таких как узлы или пользователи, на основе значений полей и атрибутов базы данных.
Обычно Finder используется для этих целей:
- В качестве инструмента поиска для поиска группы узлов или пользователей.
- Как способ перехода к определенному узлу или странице пользователя, которая соответствует критериям.
- В качестве альтернативы открытым фильтрам для отображения модуля представлений.
Просмотры 3 предоставляют решение вашего вопроса из коробки. Это фильтр Global: Combine fields
.
Добавление полей
Добавьте
Global: Combine fields
фильтр к критериям фильтрацииОтметьте поля, которые вы хотите объединить в настройках фильтра
Если вы используете набор дисплеев или режим тизеров - принудительно используйте поля в настройках просмотра.
Решение 2
Фильтры представлений заполняют - хороший модуль. Но есть 1 проблема "заполняет только СТРОКОВЫЕ фильтры".
Для получения дополнительной информации обратитесь к Представления вопрос о Применение одного открытого фильтра к нескольким полям.