El widget de búsqueda proporciona una interfaz de búsqueda que se puede personalizar para aplicaciones web. El widget solo requiere una pequeña cantidad de código HTML y JavaScript para implementarse, y habilita funciones de búsqueda comunes como facetas y paginación. También puedes personalizar partes de la interfaz con CSS y JavaScript.
Si necesitas más flexibilidad de la que ofrece el widget, considera usar la API de consulta. Para obtener información sobre cómo crear una interfaz de búsqueda con la API de consulta, visita Crea una interfaz de búsqueda con la API de consulta.
Compila una interfaz de búsqueda
Para compilar una interfaz de búsqueda, debes seguir varios pasos:
- Configura una aplicación de búsqueda.
- Genera un ID de cliente para la aplicación.
- Agrega el lenguaje de marcado HTML para el cuadro de búsqueda y los resultados.
- Carga el widget en la página.
- Inicializa el widget.
Configura una aplicación de búsqueda
Cada interfaz de búsqueda debe tener una aplicación de búsqueda definida en la Consola del administrador. La aplicación de búsqueda proporciona acceso información para la consulta, como las fuentes de datos, las facetas, y calidad de búsqueda.
Para crear una aplicación de búsqueda, consulta Crea una experiencia de búsqueda personalizada.
Genera un ID de cliente para la aplicación
Además de los pasos en Configurar el acceso a la API de Google Cloud Search, también debes generar un ID de cliente para la aplicación web.
Cuando configures el proyecto, realiza los siguientes pasos:
- Selecciona el tipo de cliente del navegador web.
- Proporciona la URI de origen de tu aplicación.
- Toma nota del ID de cliente que se creó. Necesitarás este ID para completar los próximos pasos. No es necesario el secreto del cliente para el widget.
Si deseas obtener información adicional, consulta OAuth 2.0 para la aplicación web del lado del cliente.
Agrega el lenguaje de marcado HTML
El widget requiere una pequeña cantidad de código HTML para funcionar. Debes proporcionar la siguiente información:
- Un elemento
input
para el cuadro de búsqueda - Un elemento en el cual fijar la ventana emergente de sugerencias.
- Un elemento para contener los resultados de la búsqueda.
- Un elemento para contener los controles de facetas (opcional).
El siguiente fragmento de código HTML muestra el código HTML de un widget de búsqueda, donde el elemento
los elementos que se deben vincular se identifican con su atributo id
:
Carga el widget
El widget se carga de manera dinámica través de una secuencia de comandos de cargador. Para incluir
el cargador, usa la etiqueta <script>
como se muestra a continuación:
Debes proporcionar una devolución de llamada onload
en la etiqueta de la secuencia de comandos. La función recibe una llamada cuando el cargador está listo. Cuando el cargador esté listo, continúa cargando el widget
llamando a gapi.load()
para cargar el cliente de API, el Acceso con Google y los módulos de Cloud Search.
Se llama a la función initializeApp()
después de que se llaman todos los módulos.
cargado.
Inicializa el widget
Primero, inicializa la biblioteca cliente llamando
gapi.client.init()
o gapi.auth2.init()
por tu ID de cliente generado
y el permiso de https://www.googleapis.com/auth/cloud_search.query
. Luego, usa
gapi.cloudsearch.widget.resultscontainer.Builder
y
Clases gapi.cloudsearch.widget.searchbox.Builder
para configurar el widget
y vincularla a tus elementos HTML.
En el siguiente ejemplo, se muestra cómo inicializar el widget:
En el ejemplo anterior, se hace referencia a dos variables para la configuración que se definen de la siguiente manera:
Personaliza la experiencia de acceso
De forma predeterminada, el widget solicita a los usuarios acceder y autorizar la aplicación en el momento en que comienzan a escribir una consulta. Puedes usar el Acceso con Google para sitios web a fin de ofrecer una experiencia de acceso más personalizada a los usuarios.
Autoriza a los usuarios directamente
Usa Acceder con Google para supervisar el estado de acceso de la
y los usuarios que accedan o salgan de la cuenta según sea necesario. Por ejemplo, los siguientes
En el ejemplo anterior, se observa el isSignedIn
para supervisar los cambios en el acceso
usa GoogleAuth.signIn()
método para iniciar el acceso desde un botón
clic:
Para obtener detalles adicionales, consulta Acceder con Google.
Usuarios con acceso automático
Puedes optimizar aún más la experiencia de acceso mediante la autorización previa de la aplicación en nombre de los usuarios de tu organización. Esta técnica también es útil si se usa Cloud Identity Aware Proxy para proteger la aplicación.
Para obtener información adicional, consulta Usa el acceso a Google en aplicaciones de TI.
Personaliza la interfaz
Puedes cambiar la apariencia de la interfaz de búsqueda mediante una combinación de técnicas:
- Anular los estilos con CSS
- Decorar los elementos con un adaptador
- Crear elementos personalizados con un adaptador
Anula los estilos con CSS
El widget de búsqueda cuenta con su propio CSS para diseñar elementos de sugerencias, resultados y controles de paginación. Puedes volver a diseñar estos elementos según sea necesario.
Durante la carga, el widget de búsqueda carga de manera dinámica su hoja de estilo predeterminada. Esto sucede después de que se cargan las hojas de estilo de la aplicación, lo que prioriza las reglas. Para garantizar que tus propios estilos tengan prioridad sobre los estilos predeterminados, usa los selectores principales para aumentar la especificidad de las reglas predeterminadas.
Por ejemplo, la siguiente regla no tiene efecto si se carga en una
La etiqueta link
o style
del documento.
.cloudsearch_suggestion_container {
font-size: 14px;
}
En su lugar, califica la regla con el ID o la clase del contenedor principal declarado en la página.
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
Para ver una lista de las clases de compatibilidad y un ejemplo de código HTML que proporciona el widget, consulta la referencia Clases de CSS compatibles.
Decora los elementos con un adaptador
Para decorar un elemento antes de la renderización, crea y registra un elemento
adaptador que implemente uno de los métodos de decoración, como
decorateSuggestionElement
o decorateSearchResultElement.
Por ejemplo, el siguiente adaptador agrega una clase personalizada a los elementos de sugerencias y resultados.
Para registrar el adaptador cuando inicialices el widget, usa setAdapter()
.
de la clase Builder
respectiva:
Los decoradores pueden modificar los atributos del elemento del contenedor y cualquier elemento secundario. Los elementos secundarios se pueden agregar o quitar durante la decoración. Sin embargo, si realizas cambios estructurales a los elementos, debes considerar la posibilidad de crear elementos directamente en vez de decorarlos.
Crea elementos personalizados con un adaptador
Para crear un elemento personalizado para una sugerencia, un contenedor de facetas o un resultado de la búsqueda,
crear y registrar un adaptador que implemente
createSuggestionElement
:
createFacetResultElement
:
o createSearchResultElement
respectivamente.
Los siguientes adaptadores ilustran cómo crear sugerencias personalizadas y resultados de la búsqueda.
con etiquetas HTML <template>
.
Para registrar el adaptador cuando inicialices el widget, usa el setAdapter()
de la clase Builder
respectiva:
Crea elementos de faceta personalizados con createFacetResultElement
está sujeto a varias restricciones:
- Debes adjuntar la clase de CSS
cloudsearch_facet_bucket_clickable
al archivo en el que los usuarios hacen clic para activar o desactivar un bucket. - Debes unir cada bucket a un elemento contenedor con el CSS
clase
cloudsearch_facet_bucket_container
. - No puedes procesar los depósitos en un orden diferente del que aparecen en la respuesta.
Por ejemplo, el siguiente fragmento procesa facetas mediante vínculos, en vez de casillas de verificación.
Personaliza el comportamiento de la búsqueda
La configuración de la aplicación de búsqueda representa la configuración predeterminada de una interfaz de búsqueda, y es estática. Para implementar filtros o facetas dinámicos, como permitir a los usuarios activar o desactivar las fuentes de datos, puedes anular la configuración de la aplicación de búsqueda interceptando la solicitud de búsqueda con un adaptador.
Implementa un adaptador con el
interceptSearchRequest
para modificar las solicitudes realizadas al
API de búsqueda
antes de la ejecución.
Por ejemplo, el siguiente adaptador intercepta las solicitudes para restringir las consultas a una fuente que selecciona el usuario:
Para registrar el adaptador cuando inicialices el widget, usa el
setAdapter()
cuando se compila ResultsContainer
El siguiente código HTML se usa a fin de mostrar un cuadro de selección para filtrar por fuentes:
El siguiente código escucha el cambio, establece la selección y vuelve a ejecutar la consulta si es necesario.
También puedes interceptar la respuesta de búsqueda implementando
interceptSearchResponse
en el adaptador.
Fija la versión de la API
De forma predeterminada, el widget usa la última versión estable de la API. Para bloquear un
una versión específica, establece el parámetro de configuración cloudsearch.config/apiVersion
a la versión preferida antes de inicializar el widget.
La versión predeterminada de la API será 1.0 si se configura o no como un valor no válido.
Fija la versión del widget
Para evitar cambios inesperados en las interfaces de búsqueda, configura
Parámetro de configuración de cloudsearch.config/clientVersion
como se muestra a continuación:
gapi.config.update('cloudsearch.config/clientVersion', 1.1);
La versión predeterminada del widget será 1.0 si se deja sin configurar o se configura como un valor no válido.
Asegura la interfaz de búsqueda
Los resultados de la búsqueda contienen información altamente sensible. Sigue las recomendaciones para proteger las aplicaciones web, especialmente contra ataques de clickjacking.
Para obtener más información, consulta el proyecto guía de OWASP.
Cómo habilitar la depuración
Usa interceptSearchRequest
.
para activar la depuración en el widget de búsqueda. Por ejemplo:
if (!request.requestOptions) {
// Make sure requestOptions is populated
request.requestOptions = {};
}
// Enable debugging
request.requestOptions.debugOptions = {enableDebugging: true}
return request;