Domanda

Plone ha una bellissima casella di ricerca con una funzionalità simile a "Google suggest" per il suo sito.Indicizza anche i documenti caricati come i PDF.Qualcuno conosce un modulo in grado di fornire questo tipo di funzionalità in un sito Django?

È stato utile?

Soluzione

Plone implementa la sua funzionalità LiveSearch mantenendo una tabella di metadati separata di attributi indicizzati (campi come ultima modifica, creatore, titolo vengono copiati dagli oggetti di contenuto in questa tabella).Gli oggetti contenuto quindi inviano eventi ObjectAdded/ObjectModified/ObjectRemoved e un sottoscrittore di eventi ascolta questi eventi ed è responsabile dell'aggiornamento della tabella dei metadati (in Django gli eventi sono segnali denominati).Poi c'è una vista del browser esposta su un URL fisso che cerca i metadati e restituisce l'HTML LiveSearch appropriato e infine a ciascuna pagina HTML viene inviato il JavaScript appropriato per gestire la funzionalità AJAX di completamento automatico per interrogare questa vista e inserire i risultati HTML risultanti nel DOM.

Se desideri che LiveSearch esegua query su più modelli/tipi di contenuto, probabilmente dovrai inviare i tuoi eventi e fare in modo che un abbonato li gestisca in modo appropriato.Ciò non è necessario per set di dati più piccoli o siti a traffico ridotto, dove la penalità in termini di prestazioni per l'esecuzione di più query per una singola ricerca non è un problema (o si desidera eseguire la ricerca solo in un singolo tipo di contenuto) e è possibile eseguirne semplicemente diverse query dalla tua vista.

Per quanto riguarda il lato JavaScript, puoi crearne uno tuo o utilizzare una libreria JavaScript esistente.Questo di solito è chiamato completamento automatico nella libreria JS.Sono disponibili il completamento automatico YUI e il completamento automatico Scriptaculous per cominciare, e probabilmente molte altre implementazioni di completamento automatico JavaScript disponibili.Plone usa KSS per la sua libreria JavaScript, il plugin KSS livesearch è un buon punto di partenza se cerchi un codice di esempio da cui attingere.

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

E un tutorial sull'utilizzo di KSS con Django:

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

KSS è piuttosto carino poiché separa in modo netto il comportamento dal contenuto sul lato client (senza la necessità di scrivere JavaScript), ma Scriptaculous è concettualmente un po' più semplice e ha una documentazione leggermente migliore (http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top