Question

Plone dispose d'un superbe champ de recherche avec un "Google suggère". comme fonctionnalité pour son site. Il indexe même les documents téléchargés tels que les PDF. Quelqu'un connaît-il un module capable de fournir ce type de fonctionnalité sur un site Django?

Était-ce utile?

La solution

Plone implémente sa fonctionnalité LiveSearch en maintenant une table de métadonnées distincte pour les attributs indexés (des champs tels que la dernière modification, créateur, titre sont copiés des objets de contenu dans cette table). Les objets de contenu envoient ensuite des événements ObjectAdded / ObjectModified / ObjectRemoved. Un abonné d'événements écoute ces événements et est responsable de la mise à jour de la table de métadonnées (dans Django, les événements sont nommés). Il existe ensuite une vue du navigateur exposée à une URL fixe qui recherche les métadonnées et retourne le code HTML LiveSearch approprié. Enfin, chaque page HTML reçoit le code JavaScript approprié pour gérer la fonctionnalité AJAX autocomplete permettant d'interroger cette vue et de positionner les résultats HTML résultants dans le dossier. DOM.

Si vous souhaitez que votre LiveSearch interroge plusieurs modèles / types de contenu, vous devrez probablement envoyer vos propres événements et les faire gérer par un abonné. Cela n’est pas nécessaire pour les ensembles de données plus petits ou les sites à faible trafic, où la pénalité de performance liée à la réalisation de plusieurs requêtes pour une recherche unique n’est pas un problème (ou si vous souhaitez uniquement rechercher un seul type de contenu) et que vous ne pouvez effectuer que plusieurs recherches. requêtes à partir de votre vue.

En ce qui concerne le côté JavaScript, vous pouvez utiliser votre propre bibliothèque ou utiliser une bibliothèque JavaScript existante. Ceci est généralement appelé autocomplete dans la bibliothèque JS. Il y a YUI autocomplete et Scriptaculous autocomplete pour les débutants, et probablement beaucoup d'autres implémentations JavaScript auto-complétées. Plone utilise KSS pour sa bibliothèque JavaScript. Le plugin KSS livesearch est un bon point de départ si vous recherchez un exemple de code à utiliser.

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

Et un tutoriel sur l'utilisation de KSS avec Django:

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

KSS est très agréable car il sépare clairement le comportement du contenu côté client (sans avoir besoin d'écrire en JavaScript), mais Scriptaculous est conceptuellement un peu plus simple et propose une documentation un peu meilleure ( http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter ).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top