Виджет поиска предоставляет настраиваемый интерфейс поиска для веб-приложений. Для реализации виджета требуется лишь небольшой фрагмент HTML и JavaScript, и он поддерживает стандартные функции поиска, такие как фасеты и пагинация. Вы также можете настраивать элементы интерфейса с помощью CSS и JavaScript.
Если вам требуется больше гибкости, чем предлагает виджет, рассмотрите возможность использования API запросов. Информация о создании интерфейса поиска с помощью API запросов приведена в статье «Создание интерфейса поиска с помощью API запросов» .
Создайте поисковый интерфейс
Создание интерфейса поиска требует нескольких шагов:
- Настроить поисковое приложение
- Сгенерируйте идентификатор клиента для приложения
- Добавьте HTML-разметку для поля поиска и результатов
- Загрузите виджет на страницу
- Инициализировать виджет
Настроить поисковое приложение
Для каждого поискового интерфейса в консоли администратора должно быть определено поисковое приложение . Поисковое приложение предоставляет дополнительную информацию по запросу, такую как источники данных, фасеты и настройки качества поиска.
Чтобы создать поисковое приложение, обратитесь к разделу Создание пользовательского опыта поиска .
Сгенерируйте идентификатор клиента для приложения
В дополнение к шагам, описанным в разделе Настройка доступа к API Google Cloud Search , вам также необходимо сгенерировать идентификатор клиента для веб-приложения.
При настройке проекта:
- Выберите тип клиента веб-браузера
- Укажите исходный URI вашего приложения.
- Запишите созданный идентификатор клиента. Он понадобится вам для выполнения следующих шагов. Секретный код клиента для виджета не требуется.
Дополнительную информацию см. в разделе OAuth 2.0 для клиентских веб-приложений .
Добавить HTML-разметку
Для работы виджета требуется небольшой фрагмент HTML-кода. Необходимо предоставить:
- Элемент
input
для поля поиска. - Элемент, к которому следует привязать всплывающее окно с предложением.
- Элемент, содержащий результаты поиска.
- (Необязательно) Укажите элемент, содержащий элементы управления гранями.
В следующем фрагменте HTML показан HTML-код для виджета поиска, в котором элементы, которые необходимо привязать, идентифицируются по их атрибуту id
:
Загрузить виджет
Виджет динамически загружается через скрипт загрузчика. Чтобы включить загрузчик, используйте тег <script>
, как показано ниже:
Необходимо предоставить функцию обратного вызова onload
в теге script. Функция вызывается, когда загрузчик готов. После этого продолжите загрузку виджета, вызвав метод gapi.load()
для загрузки API-клиента, входа через Google и модулей Cloud Search.
Функция initializeApp()
вызывается после загрузки всех модулей.
Инициализировать виджет
Сначала инициализируйте клиентскую библиотеку, вызвав метод 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 для веб-сайтов», чтобы сделать процесс входа более удобным для пользователей.
Авторизуйте пользователей напрямую
Используйте функцию «Вход через Google» для отслеживания состояния входа пользователя и входа/выхода пользователей по мере необходимости. Например, в следующем примере отслеживается состояние isSignedIn
для отслеживания изменений статуса входа и используется метод GoogleAuth.signIn()
для инициации входа нажатием кнопки:
Дополнительную информацию см. в разделе «Войти через Google» .
Автоматически входить в систему пользователей
Вы можете ещё больше упростить процесс входа, предварительно авторизовав приложение от имени пользователей вашей организации. Этот метод также полезен при использовании Cloud Identity Aware Proxy для защиты приложения.
Дополнительную информацию см. в разделе Использование входа 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()
при построении 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;