Pregunta

Plone tiene un hermoso cuadro de búsqueda con una funcionalidad similar a "sugerencia de Google" para su sitio.Incluso indexa documentos cargados como archivos PDF.¿Alguien conoce algún módulo que pueda proporcionar este tipo de funcionalidad en un sitio Django?

¿Fue útil?

Solución

Plone implementa su función LiveSearch manteniendo una tabla de metadatos separada de atributos indexados (campos como última modificación, creador, título se copian de los objetos de contenido a esta tabla).Los objetos de contenido luego envían eventos ObjectAdded/ObjectModified/ObjectRemoved, y un suscriptor de eventos escucha estos eventos y es responsable de actualizar la tabla de metadatos (en Django los eventos se denominan señales).Luego hay una vista del navegador expuesta en una URL fija que busca los metadatos y devuelve el HTML de LiveSearch apropiado y, finalmente, a cada página HTML se le envía el JavaScript apropiado para manejar la funcionalidad AJAX de autocompletar para consultar esta vista y colocar los resultados HTML resultantes en el DOM.

Si desea que LiveSearch consulte múltiples modelos/tipos de contenido, probablemente necesitará enviar sus propios eventos y que un suscriptor los maneje adecuadamente.Esto no es necesario para conjuntos de datos más pequeños o sitios con menor tráfico, donde la penalización de rendimiento por realizar múltiples consultas para una sola búsqueda no es una preocupación (o solo desea buscar un único tipo de contenido) y solo puede hacer varias consultas desde su Vista.

En cuanto al lado de JavaScript, puede crear el suyo propio o utilizar una biblioteca de JavaScript existente.Esto suele denominarse autocompletar en la biblioteca JS.Para empezar, existe el autocompletado YUI y el autocompletado Scriptaculous, y probablemente haya muchas más implementaciones de autocompletado de JavaScript.Plone usa KSS para su biblioteca JavaScript, el complemento KSS livesearch es un buen lugar para comenzar si busca un código de ejemplo para extraerlo.

http://pypi.python.org/pypi/kss.plugin.livesearch

Y un tutorial sobre el uso de KSS con Django:

http://kssproject.org/docs/tutorial/kss-in-django-with-kss-django-application

KSS es bastante bueno ya que separa claramente el comportamiento del contenido en el lado del cliente (sin necesidad de escribir JavaScript), pero Scriptaculous es conceptualmente un poco más simple y tiene una documentación algo mejor (http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top