Widżet wyszukiwania udostępnia konfigurowalny interfejs wyszukiwania dla aplikacji internetowych. Widżet wymaga tylko niewielkiej ilości kodu HTML i JavaScript, aby go wdrożyć, i umożliwia korzystanie z popularnych funkcji wyszukiwania, takich jak aspekty i stronicowanie. Możesz też dostosowywać fragmenty interfejsu za pomocą 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 za pomocą interfejsu Query API.
Tworzenie interfejsu wyszukiwania
Tworzenie interfejsu wyszukiwania wymaga wykonania kilku czynności:
- Konfigurowanie wyszukiwarki
- Wygeneruj identyfikator klienta aplikacji.
- Dodawanie znaczników HTML do pola wyszukiwania i wyników
- Wczytywanie widżetu na stronie
- Inicjowanie widżetu
Konfigurowanie wyszukiwarki
Każdy interfejs wyszukiwania musi mieć zdefiniowaną aplikację wyszukiwania w konsoli administracyjnej. Wyszukiwarka podaje dodatkowe informacje o zapytaniu, takie jak źródła danych, aspekty i ustawienia jakości wyszukiwania.
Aby utworzyć wyszukiwarkę, zapoznaj się z artykułem Tworzenie niestandardowego środowiska wyszukiwania.
Wygeneruj identyfikator klienta aplikacji.
Oprócz 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.
- Podaj identyfikator URI źródła aplikacji.
- Zapisz utworzony identyfikator klienta. Aby wykonać następne kroki, musisz mieć identyfikator klienta. W przypadku widżetu tajny klucz klienta nie jest wymagany.
Więcej informacji znajdziesz w artykule OAuth 2.0 w przypadku aplikacji internetowej po stronie klienta.
Dodawanie znaczników HTML
Aby widżet działał, potrzebuje niewielkiej ilości kodu HTML. Musisz podać:
- Element
input
w polu wyszukiwania. - Element, do którego ma być przypięte wyskakujące okienko z sugestiami.
- Element zawierający wyniki wyszukiwania.
- (Opcjonalnie) Podaj element, który będzie zawierać elementy sterujące aspektami.
Poniższy fragment kodu HTML przedstawia kod HTML widżetu wyszukiwania, w którym elementy do powiązania są identyfikowane za pomocą atrybutu id
:
Wczytywanie widżetu
Widżet jest ładowany dynamicznie za pomocą skryptu wczytującego. Aby uwzględnić moduł wczytujący, użyj tagu <script>
w ten sposób:
W tagu skryptu musisz podać wywołanie zwrotne onload
. Funkcja jest wywoływana, gdy moduł wczytujący jest gotowy. Gdy moduł wczytujący będzie gotowy, wczytaj widżet, wywołując funkcję gapi.load()
, aby wczytać klienta interfejsu API, logowanie przez Google i moduły Cloud Search.
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 powyższym przykładzie odwołujemy się do 2 zmiennych konfiguracji zdefiniowanych w ten sposób:
Dostosowywanie procesu logowania
Domyślnie widżet prosi użytkowników o zalogowanie się i autoryzację aplikacji w momencie, gdy zaczynają wpisywać zapytanie. Możesz użyć logowania przez Google w witrynach, aby zapewnić użytkownikom bardziej spersonalizowane logowanie.
Bezpośrednie autoryzowanie użytkowników
Użyj Zaloguj się przez Google, aby monitorować stan logowania użytkownika i w razie potrzeby logować lub wylogowywać użytkowników. Na przykład poniższy przykład obserwuje stan isSignedIn
, aby monitorować zmiany logowania, i używa metody GoogleAuth.signIn()
, aby zainicjować logowanie po kliknięciu przycisku:
Więcej informacji znajdziesz w artykule Logowanie się przez Google.
Automatyczne logowanie użytkowników
Możesz jeszcze bardziej uprościć proces logowania, wstępnie autoryzując aplikację w imieniu użytkowników w Twojej organizacji. Ta technika jest przydatna również w przypadku korzystania z Cloud Identity Aware Proxy do ochrony aplikacji.
Więcej informacji znajdziesz w artykule Używanie logowania przez Google w aplikacjach IT.
Dostosowywanie interfejsu
Wygląd interfejsu wyszukiwania możesz zmienić za pomocą kombinacji 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 za pomocą CSS
Widżet wyszukiwania ma własny arkusz CSS, który umożliwia stylizowanie elementów sugestii i wyników, a także elementów sterujących paginacją. W razie potrzeby możesz zmienić styl tych elementów.
Podczas wczytywania widżet wyszukiwania dynamicznie wczytuje domyślny arkusz stylów. Dzieje się to po załadowaniu arkuszy stylów aplikacji, co zwiększa priorytet reguł. Aby mieć pewność, że Twoje style mają pierwszeństwo przed stylami domyślnymi, użyj selektorów elementów nadrzędnych, aby zwiększyć szczegółowość reguł domyślnych.
Na przykład poniższa reguła nie działa, jeśli jest wczytywana w statycznym tagu link
lub style
w dokumencie.
.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 generowany przez widżet znajdziesz w sekcji 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()
Builder
klasy:
Dekoratory mogą modyfikować atrybuty elementu kontenera, a także wszystkie elementy podrzędne. Podczas dekorowania można dodawać i usuwać elementy podrzędne. Jeśli jednak wprowadzasz zmiany strukturalne w elementach, rozważ utworzenie ich bezpośrednio zamiast dekorowania.
Tworzenie elementów niestandardowych za pomocą adaptera
Aby utworzyć element niestandardowy dla sugestii, kontenera aspektów lub wyniku wyszukiwania, utwórz i zarejestruj odpowiednio adapter, który implementuje interfejs createSuggestionElement
, createFacetResultElement
lub createSearchResultElement
.
Poniższe adaptery pokazują, 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()
klasy Builder
:
Tworzenie niestandardowych elementów aspektów za pomocą createFacetResultElement
podlega kilku ograniczeniom:
- Musisz dołączyć klasę CSS
cloudsearch_facet_bucket_clickable
do elementu, który użytkownicy klikają, aby przełączać zasobnik. - Każdy koszyk musi być umieszczony w elemencie zawierającym z klasą CSS
cloudsearch_facet_bucket_container
. - Nie możesz renderować przedziałów w innej kolejności niż w odpowiedzi.
Na przykład ten fragment kodu renderuje aspekty za pomocą linków zamiast pól wyboru.
Dostosowywanie działania wyszukiwarki
Ustawienia aplikacji do wyszukiwania reprezentują domyślną konfigurację interfejsu wyszukiwania i są statyczne. Aby wdrożyć dynamiczne filtry lub aspekty, np. umożliwić użytkownikom przełączanie źródeł danych, możesz zastąpić ustawienia aplikacji do wyszukiwania, przechwytując żądanie wyszukiwania za pomocą adaptera.
Zaimplementuj adapter z metodą
interceptSearchRequest
do modyfikowania żądań wysyłanych do
interfejsu Search API
przed ich wykonaniem.
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 tworzenia ResultsContainer
.
Poniższy kod HTML służy do wyświetlania pola wyboru, które umożliwia filtrowanie 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, implementując w adapterze funkcję
interceptSearchResponse
.
Przypinanie wersji 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 wersja interfejsu API nie zostanie ustawiona lub będzie miała nieprawidłową wartość, domyślnie będzie to 1.0.
Przypinanie wersji widżetu
Aby uniknąć nieoczekiwanych zmian w interfejsach 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 będzie miała nieprawidłową wartość, domyślnie będzie to 1.0.
Zabezpieczanie interfejsu wyszukiwania
Wyniki wyszukiwania zawierają informacje o charakterze poufnym. Postępuj zgodnie ze sprawdzonymi metodami zabezpieczania aplikacji internetowych, zwłaszcza przed atakami typu clickjacking.
Więcej informacji znajdziesz w przewodniku OWASP.
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;