Widżet wyszukiwania udostępnia konfigurowalny interfejs wyszukiwania dla aplikacji internetowych. Do jego wdrożenia potrzeba tylko niewielkiej ilości kodu HTML i JavaScriptu. Umożliwia on stosowanie typowych funkcji wyszukiwania, takich jak filtry i strony podziału. Możesz też dostosowywać części interfejsu za pomocą kodu CSS i JavaScript.
Jeśli potrzebujesz większej elastyczności niż ta, którą zapewnia widżet, rozważ użycie interfejsu Query API. Informacje o tworzeniu interfejsu wyszukiwania za pomocą interfejsu Query API znajdziesz w artykule Tworzenie interfejsu wyszukiwania przy użyciu interfejsu Query API.
Tworzenie interfejsu wyszukiwania
Utworzenie interfejsu wyszukiwania składa się z kilku kroków:
- Konfigurowanie wyszukiwarki
- wygenerować identyfikator klienta dla aplikacji.
- Dodaj znaczniki HTML pola wyszukiwania i wyników
- Wczytywanie widżetu na stronie
- Inicjowanie widżetu
Konfigurowanie wyszukiwarki
Każdy interfejs wyszukiwarki musi mieć zdefiniowaną aplikację wyszukiwania w konsoli administracyjnej. Wyszukiwarka udostępnia dodatkowe informacje związane z zapytaniem, np. źródła danych, aspekty i ustawienia jakości wyszukiwania.
Aby utworzyć wyszukiwarkę, zapoznaj się z artykułem Utwórz niestandardowe środowisko wyszukiwania.
wygenerować identyfikator klienta dla aplikacji.
Oprócz wykonania czynności opisanych w artykule Konfigurowanie dostępu do interfejsu Google Cloud Search API musisz też wygenerować identyfikator klienta dla aplikacji internetowej.
Podczas konfigurowania projektu:
- Wybierz typ klienta Przeglądarka internetowa.
- Podaj identyfikator URI źródła aplikacji.
- Zapisz utworzony identyfikator klienta. Identyfikator klienta będzie potrzebny do wykonania kolejnych czynności. W przypadku widżetu nie jest wymagany tajny klucz klienta.
Więcej informacji znajdziesz w artykule OAuth 2.0 w przypadku aplikacji internetowej po stronie klienta.
Dodawanie znaczników HTML
Do działania widżetu wymagana jest niewielka ilość kodu HTML. Musisz podać:
- Element
input
w polu wyszukiwania. - Element, do którego ma być zakotwiczone wyskakujące okienko z propozycją.
- Element zawierający wyniki wyszukiwania.
- (Opcjonalnie) Podaj element, który będzie zawierać elementy sterujące.
Ten fragment kodu HTML pokazuje kod HTML widżetu wyszukiwania, w którym elementy do powiązania są identyfikowane za pomocą atrybutu id
:
Wczytywanie widżetu
Widżet jest wczytywany dynamicznie za pomocą skryptu ładowarki. Aby uwzględnić ładowarkę, użyj tagu <script>
w taki sposób:
W tagu skryptu musisz podać wywołanie zwrotne onload
. Funkcja jest wywoływana,
gdy moduł wczytywania jest gotowy. Gdy ładowarka będzie gotowa, kontynuuj wczytywanie widżetu, wywołując gapi.load()
, aby wczytać moduły klienta API, logowania w Google i wyszukiwarki w chmurze.
Funkcja initializeApp()
jest wywoływana po wczytaniu wszystkich modułów.
Inicjowanie widżetu
Najpierw zainicjuj bibliotekę klienta, wywołując funkcję gapi.client.init()
lub gapi.auth2.init()
z wygenerowanym identyfikatorem klienta i zakresem https://www.googleapis.com/auth/cloud_search.query
. Następnie użyj klas gapi.cloudsearch.widget.resultscontainer.Builder
i gapi.cloudsearch.widget.searchbox.Builder
, aby skonfigurować widżet i powiązać go z elementami HTML.
Poniższy przykład pokazuje, jak zainicjować widżet:
W przykładzie powyżej podano 2 zmienne konfiguracji zdefiniowane w taki sposób:
Dostosowywanie logowania
Domyślnie widget prosi użytkowników o zalogowanie się i autoryzowanie aplikacji w momencie, gdy zaczną wpisywać zapytanie. Możesz użyć logowania w Google w witrynach, aby zapewnić użytkownikom bardziej dopasowane logowanie.
Bezpośrednie autoryzację użytkowników
Używaj funkcji Zaloguj się przez Google, aby monitorować stan logowania użytkownika i w razie potrzeby logować lub wylogowywać użytkowników. Na przykład w tym przykładzie stan isSignedIn
służy do monitorowania zmian dotyczących logowania, a metoda GoogleAuth.signIn()
służy do inicjowania logowania po kliknięciu przycisku:
Więcej informacji znajdziesz w artykule Logowanie się przez Google.
Automatyczne logowanie użytkowników
Możesz jeszcze bardziej usprawnić proces logowania, autoryzując aplikację z wyprzedzeniem w imieniu użytkowników w Twojej organizacji. Ta metoda jest też przydatna, jeśli do ochrony aplikacji używasz serwera proxy Cloud Identity-Aware.
Więcej informacji znajdziesz w artykule Korzystanie z logowania przez Google w aplikacjach IT.
Dostosowywanie interfejsu
Wygląd interfejsu wyszukiwania możesz zmienić, stosując kombinację tych technik:
- Zastępowanie stylów za pomocą CSS
- Udekoruj elementy za pomocą adaptera
- Tworzenie elementów niestandardowych za pomocą adaptera
Zastępowanie stylów CSS
Widżet wyszukiwarki ma własny plik CSS do stylizacji elementów sugestii i wyników, a także elementy sterowania stroną. W razie potrzeby możesz zmienić styl tych elementów.
Podczas wczytywania widżet wyszukiwania dynamicznie wczytuje swoją domyślną arkusz stylów. Dzieje się to po załadowaniu arkuszy stylów aplikacji, co zwiększa priorytet reguł. Aby mieć pewność, że Twoje style będą miały pierwszeństwo przed stylami domyślnymi, zwiększ szczegółowość reguł domyślnych za pomocą selektorów elementów nadrzędnych.
Na przykład poniższa reguła nie ma żadnego wpływu, jeśli jest wczytana w dokumencie w stałym elemencie link
lub style
.
.cloudsearch_suggestion_container {
font-size: 14px;
}
Zamiast tego określ regułę za pomocą identyfikatora lub klasy kontenera nadrzędnego zadeklarowanego na stronie.
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
Listę obsługiwanych klas i przykładowy kod HTML utworzony przez widżet znajdziesz w artykule Obsługiwane klasy CSS.
Udekoruj elementy za pomocą adaptera
Aby udekorować element przed renderowaniem, utwórz i zarejestruj adapter, który implementuje jedną z metod dekorowania, np. decorateSuggestionElement
lub decorateSearchResultElement.
.
Na przykład te adaptery dodają klasę niestandardową do elementów sugestii i wyników.
Aby zarejestrować adapter podczas inicjowania widżetu, użyj metody setAdapter()
klasy Builder
:
Dekoratory mogą modyfikować atrybuty elementu kontenera, a także wszelkie elementy podrzędne. Podczas dekorowania można dodawać i usuwać elementy podrzędne. Jeśli jednak wprowadzasz zmiany strukturalne elementów, zamiast dekorowania rozważ utworzenie elementów bezpośrednio.
Tworzenie elementów niestandardowych za pomocą adaptera
Aby utworzyć element niestandardowy dla sugestii, kontenera aspektów lub wyniku wyszukiwania, utwórz i zarejestruj adapter, który implementuje odpowiednio interfejs createSuggestionElement
, createFacetResultElement
lub createSearchResultElement
.
W następujących adapterach pokazano, jak tworzyć niestandardowe elementy sugestii i wyników wyszukiwania za pomocą tagów HTML <template>
.
Aby zarejestrować adapter podczas inicjowania widżetu, użyj metody setAdapter()
odpowiedniej klasy Builder
:
Tworzenie elementów niestandardowych za pomocą createFacetResultElement
jest objęte kilkoma ograniczeniami:
- Musisz dołączyć klasę CSS
cloudsearch_facet_bucket_clickable
do elementu, który użytkownicy klikają, aby przełączyć zasobnik. - Każdy zbiornik musisz ująć w element zawierający z klasą CSS
cloudsearch_facet_bucket_container
. - Zasobników nie można renderować w innej kolejności niż ta, w której występują w odpowiedzi.
Na przykład ten fragment kodu renderuje aspekty za pomocą linków, a nie pól wyboru.
Dostosowywanie zachowania wyszukiwania
Ustawienia wyszukiwarki reprezentują domyślną konfigurację interfejsu wyszukiwania i są statyczne. Aby wdrożyć filtry dynamiczne lub aspekty, np. umożliwić użytkownikom przełączanie źródeł danych, możesz zastąpić ustawienia aplikacji wyszukiwarki, przechwytując żądanie wyszukiwania za pomocą adaptera.
Zaimplementuj adapter z metodą interceptSearchRequest
, aby modyfikować żądania przesyłane do interfejsu Search API przed wykonaniem tej czynności.
Na przykład ten adapter przechwytuje żądania, aby ograniczyć zapytania do źródła wybranego przez użytkownika:
Aby zarejestrować adapter podczas inicjowania widżetu, użyj metody setAdapter()
podczas kompilowania metody ResultsContainer
.
Ten kod HTML służy do wyświetlania pola wyboru do filtrowania według źródeł:
Poniższy kod nasłuchuje zmiany, ustawia wybór i w razie potrzeby ponownie wykonuje zapytanie.
Możesz też przechwycić odpowiedź wyszukiwania, wdrażając interceptSearchResponse
w adapterze.
Przypnij wersję interfejsu API
Domyślnie widżet używa najnowszej stabilnej wersji interfejsu API. Aby zablokować konkretną wersję, przed zainicjowaniem widżetu ustaw parametr konfiguracji cloudsearch.config/apiVersion
na preferowaną wersję.
Jeśli nie zostanie ustawiona lub zostanie ustawiona nieprawidłowa wartość, wersja interfejsu API będzie domyślnie ustawiona na 1.0.
Przypinanie wersji widżetu
Aby uniknąć nieoczekiwanych zmian interfejsów wyszukiwania, ustaw parametr konfiguracji cloudsearch.config/clientVersion
w ten sposób:
gapi.config.update('cloudsearch.config/clientVersion', 1.1);
Jeśli wersja widżetu nie zostanie ustawiona lub zostanie ustawiona nieprawidłowa wartość, domyślnie zostanie ustawiona wartość 1.0.
Zabezpieczanie interfejsu wyszukiwania
Wyniki wyszukiwania zawierają szczególnie chronione informacje. Stosuj sprawdzone metody zabezpieczania aplikacji internetowych, zwłaszcza przed atakami clickjacking.
Więcej informacji znajdziesz w przewodniku OWASP Guide (w języku angielskim).
Włączanie debugowania
Użyj interceptSearchRequest
, aby włączyć debugowanie widżetu wyszukiwania. Na przykład:
if (!request.requestOptions) {
// Make sure requestOptions is populated
request.requestOptions = {};
}
// Enable debugging
request.requestOptions.debugOptions = {enableDebugging: true}
return request;