Виджет поиска предоставляет настраиваемый интерфейс поиска для веб-приложений. Для реализации виджета требуется лишь небольшой объем HTML и JavaScript, и он поддерживает общие функции поиска, такие как фасеты и нумерация страниц. Вы также можете настроить части интерфейса с помощью CSS и JavaScript.
Если вам нужна большая гибкость, чем предлагает виджет, рассмотрите возможность использования API запросов. Информацию о создании интерфейса поиска с помощью API запросов см. в разделе Создание интерфейса поиска с помощью API запросов .
Создайте интерфейс поиска
Создание интерфейса поиска требует нескольких шагов:
- Настройка приложения поиска
- Создайте идентификатор клиента для приложения.
- Добавьте HTML-разметку для поля поиска и результатов.
- Загрузите виджет на страницу
- Инициализировать виджет
Настройка приложения поиска
Каждый интерфейс поиска должен иметь приложение поиска, определенное в консоли администратора. Приложение поиска предоставляет дополнительную информацию для запроса, такую как источники данных, фасеты и настройки качества поиска.
Чтобы создать приложение поиска, обратитесь к разделу Создание пользовательского поиска .
Создайте идентификатор клиента для приложения.
Помимо действий, описанных в разделе «Настройка доступа к API Google Cloud Search» , вам также необходимо создать идентификатор клиента для веб-приложения.
При настройке проекта:
- Выберите тип клиента веб-браузера
- Укажите исходный URI вашего приложения.
- Обратите внимание на созданный идентификатор клиента. Для выполнения следующих шагов вам понадобится идентификатор клиента. Секрет клиента для виджета не требуется.
Дополнительную информацию см. в разделе OAuth 2.0 для клиентского веб-приложения .
Добавить HTML-разметку
Для работы виджета требуется небольшой объем HTML. Вы должны предоставить:
- Элемент
input
для поля поиска. - Элемент, к которому можно привязать всплывающее окно с предложением.
- Элемент, содержащий результаты поиска.
- (Необязательно) Укажите элемент, содержащий элементы управления фасетами.
В следующем фрагменте HTML показан HTML-код виджета поиска, в котором привязываемые элементы идентифицируются по атрибуту id
:
Загрузите виджет
Виджет загружается динамически с помощью скрипта-загрузчика. Чтобы включить загрузчик, используйте тег <script>
как показано:
Вы должны предоставить обратный вызов onload
в теге сценария. Функция вызывается, когда загрузчик готов. Когда загрузчик будет готов, продолжайте загрузку виджета, вызвав gapi.load()
чтобы загрузить клиент API, модули входа в Google и облачного поиска.
Функция initializeApp()
вызывается после загрузки всех модулей.
Инициализировать виджет
Сначала инициализируйте клиентскую библиотеку, вызвавgapi.client.init gapi.client.init()
gapi.auth2.init()
указав сгенерированный идентификатор клиента и область действия https://www.googleapis.com/auth/cloud_search.query
. Затем используйте gapi.cloudsearch.widget.resultscontainer.Builder
gapi.cloudsearch.widget.searchbox.Builder
, чтобы настроить виджет и привязать его к элементам HTML.
В следующем примере показано, как инициализировать виджет:
В приведенном выше примере используются две переменные для конфигурации, определенные как:
Настройте процесс входа в систему
По умолчанию виджет предлагает пользователям войти в систему и авторизовать приложение в тот момент, когда они начинают вводить запрос. Вы можете использовать Google Sign-in для веб-сайтов , чтобы предложить пользователям более индивидуальный подход к входу.
Авторизуйте пользователей напрямую
Используйте «Войти через Google», чтобы отслеживать состояние входа пользователя и при необходимости входить или выходить из системы. Например, в следующем примере рассматривается состояние isSignedIn
для отслеживания изменений входа в систему и используется метод GoogleAuth.signIn()
для инициации входа в систему нажатием кнопки:
Дополнительные сведения см. в разделе «Вход через Google» .
Автоматический вход пользователей
Вы можете еще больше упростить процесс входа в систему, предварительно авторизовав приложение от имени пользователей в вашей организации. Этот метод также полезен, если для защиты приложения используется прокси-сервер Cloud Identity Aware .
Дополнительную информацию см. в разделе Использование входа в Google с ИТ-приложениями .
Настройте интерфейс
Вы можете изменить внешний вид интерфейса поиска с помощью комбинации методов:
- Переопределить стили с помощью CSS
- Декорируем элементы переходником
- Создание пользовательских элементов с помощью адаптера
Переопределить стили с помощью CSS
Виджет поиска поставляется с собственным CSS для стилизации элементов подсказок и результатов, а также элементов управления нумерацией страниц. При необходимости вы можете изменить стиль этих элементов.
Во время загрузки виджет поиска динамически загружает таблицу стилей по умолчанию. Это происходит после загрузки таблиц стилей приложения, что повышает приоритет правил. Чтобы гарантировать, что ваши собственные стили имеют приоритет над стилями по умолчанию, используйте селекторы предков, чтобы повысить специфичность правил по умолчанию.
Например, следующее правило не имеет эффекта, если оно загружено в статическую link
или тег style
в документе.
.cloudsearch_suggestion_container {
font-size: 14px;
}
Вместо этого укажите для правила идентификатор или класс родительского контейнера, объявленный на странице.
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
Список поддерживаемых классов и пример HTML, создаваемого виджетом, см. в справочнике по поддерживаемым классам CSS .
Декорируем элементы переходником
Чтобы украсить элемент перед отрисовкой, создайте и повторно зарегистрируйте адаптер, реализующий один из методов декорирования, например decorateSuggestionElement
или decorateSearchResultElement.
Например, следующие адаптеры добавляют пользовательский класс к элементам предложения и результата.
Чтобы зарегистрировать адаптер при инициализации виджета, используйте метод setAdapter()
соответствующего класса Builder
:
Декораторы могут изменять атрибуты элемента-контейнера, а также любых дочерних элементов. Дочерние элементы могут быть добавлены или удалены во время оформления. Однако, если вы вносите структурные изменения в элементы, рассмотрите возможность непосредственного создания элементов, а не украшения.
Создание пользовательских элементов с помощью адаптера
Чтобы создать пользовательский элемент для предложения, контейнера фасетов или результатов поиска, создайте и зарегистрируйте адаптер, который реализует createSuggestionElement
, createFacetResultElement
или createSearchResultElement
соответственно.
Следующие адаптеры иллюстрируют создание пользовательских элементов предложений и результатов поиска с использованием тегов HTML <template>
.
Чтобы зарегистрировать адаптер при инициализации виджета, используйте метод setAdapter()
соответствующего класса Builder
:
Создание пользовательских фасетных элементов с помощью createFacetResultElement
подвергается нескольким ограничениям:
- Вы должны прикрепить класс CSS
cloudsearch_facet_bucket_clickable
к элементу, на который пользователи нажимают, чтобы переключить сегмент. - Вы должны обернуть каждый сегмент в содержащий его элемент с помощью CSS-класса
cloudsearch_facet_bucket_container
. - Вы не можете отображать сегменты в порядке, отличном от того, который указан в ответе.
Например, следующий фрагмент отображает фасеты с помощью ссылок вместо флажков.
Настройте поведение поиска
Настройки приложения поиска представляют собой конфигурацию по умолчанию для интерфейса поиска и являются статическими. Чтобы реализовать динамические фильтры или фасеты, например разрешить пользователям переключать источники данных, вы можете переопределить настройки приложения поиска, перехватив поисковый запрос с помощью адаптера.
Реализуйте адаптер с методом interceptSearchRequest
, чтобы изменять запросы, сделанные к API поиска, перед их выполнением.
Например, следующий адаптер перехватывает запросы, чтобы ограничить запросы источником, выбранным пользователем:
Чтобы зарегистрировать адаптер при инициализации виджета, используйте метод setAdapter()
при построенииResultContainer ResultsContainer
Следующий HTML-код используется для отображения поля выбора для фильтрации по источникам:
Следующий код прослушивает изменения, устанавливает выборку и при необходимости повторно выполняет запрос.
Вы также можете перехватить ответ поиска, реализовав interceptSearchResponse
в адаптере.
Закрепите версию API
По умолчанию виджет использует последнюю стабильную версию API. Чтобы зафиксировать определенную версию, установите для параметра конфигурации cloudsearch.config/apiVersion
предпочтительную версию перед инициализацией виджета.
Версия API по умолчанию будет равна 1.0, если она не установлена или ей присвоено недопустимое значение.
Закрепите версию виджета
Чтобы избежать неожиданных изменений в интерфейсах поиска, установите параметр конфигурации cloudsearch.config/clientVersion
, как показано:
gapi.config.update('cloudsearch.config/clientVersion', 1.1);
Версия виджета по умолчанию будет равна 1.0, если она не установлена или ей присвоено недопустимое значение.
Защитите интерфейс поиска
Результаты поиска содержат очень конфиденциальную информацию. Следуйте рекомендациям по защите веб-приложений, особенно от атак с использованием кликджекинга .
Для получения дополнительной информации см. Проект руководства OWASP.
Включить отладку
Используйте interceptSearchRequest
, чтобы включить отладку виджета поиска. Например:
if (!request.requestOptions) {
// Make sure requestOptions is populated
request.requestOptions = {};
}
// Enable debugging
request.requestOptions.debugOptions = {enableDebugging: true}
return request;