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 ono 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ż oferuje 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
Aby utworzyć interfejs wyszukiwania, wykonaj kilka czynności:
- Konfigurowanie wyszukiwarki
- wygenerować identyfikator klienta dla aplikacji.
- Dodawanie znaczników HTML do 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 dotyczące zapytania, takie jak ź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. Aby wykonać kolejne czynności, musisz mieć identyfikator klienta. W przypadku widżetu nie jest wymagany tajny klucz klienta.
Więcej informacji znajdziesz w artykule OAuth 2.0 w 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ć przypisane wyskakujące okienko z sugestiami.
- 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 ładowarka jest gotowa. 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 załadowaniu 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ć widget i powiązać go z elementami HTML.
Poniższy przykład pokazuje, jak zainicjować widżet:
W tym przykładzie występują 2 zmienna konfiguracji o tych definicjach:
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.
Autoryzowanie użytkowników bezpośrednio
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 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 za pomocą CSS
W przypadku widżetu wyszukiwania dostępny jest własny plik CSS, który pozwala stylizować elementy sugestii i wyników, a także elementy przewijania. 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 mają pierwszeństwo przed stylami domyślnymi, używaj selektorów przodków, aby zwiększyć specyficzność reguł domyślnych.
Na przykład poniższa reguła nie ma żadnego wpływu, jeśli jest wczytana w dokumencie w stałym tagu link
lub style
.
.cloudsearch_suggestion_container {
font-size: 14px;
}
Zamiast tego określ regułę za pomocą identyfikatora lub klasy nadrzędnego kontenera 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 oraz wszystkie elementy podrzędne. Elementy podrzędne można dodawać i usuwać podczas dekorowania. 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()
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ć grupę. - 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 poniższy fragment kodu renderuje pola za pomocą linków zamiast pól wyboru.
Dostosowywanie zachowania wyszukiwania
Ustawienia aplikacji do wyszukiwania to domyślna konfiguracja 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 wyszukiwania, przechwytując żądanie wyszukiwania za pomocą adaptera.
Zaimplementuj adapter za pomocą metody interceptSearchRequest
, aby modyfikować żądania wysyłane 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 kompilowania ResultsContainer
.
Ten kod HTML służy do wyświetlania pola wyboru do filtrowania według źródeł:
Poniższy kod wykrywa zmianę, 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 korzysta z 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 projekcie OWASP Guide.
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;