Pergunta

O Plone tem uma bela caixa de pesquisa com uma funcionalidade semelhante à "sugestão do Google" para seu site.Ele até indexa documentos carregados como PDFs.Alguém conhece um módulo que possa fornecer esse tipo de funcionalidade em um site Django?

Foi útil?

Solução

O Plone implementa seu recurso LiveSearch mantendo uma tabela de metadados separada de atributos indexados (campos como última modificação, criador, título são copiados dos objetos de conteúdo para esta tabela).Os objetos de conteúdo então enviam eventos ObjectAdded/ObjectModified/ObjectRemoved, e um assinante do evento escuta esses eventos e é responsável por atualizar a tabela de metadados (no Django os eventos são nomeados como sinais).Em seguida, há uma visualização do navegador exposta em um URL fixo que pesquisa os metadados e retorna o HTML apropriado do LiveSearch e, finalmente, cada página HTML recebe o JavaScript apropriado para lidar com a funcionalidade AJAX de preenchimento automático para consultar essa visualização e inserir os resultados HTML resultantes no DOM.

Se você deseja que seu LiveSearch consulte vários modelos/tipos de conteúdo, provavelmente precisará enviar seus próprios eventos e fazer com que um assinante os trate adequadamente.Isso não é necessário para conjuntos de dados menores ou sites de menor tráfego, onde a penalidade de desempenho por fazer várias consultas para uma única pesquisa não é uma preocupação (ou você deseja pesquisar apenas um único tipo de conteúdo) e você pode apenas fazer vários consultas da sua visualização.

Quanto ao lado do JavaScript, você pode criar o seu próprio ou usar uma biblioteca JavaScript existente.Isso geralmente é chamado de preenchimento automático na biblioteca JS.Existe o preenchimento automático YUI e o preenchimento automático Scriptaculous para começar, e provavelmente muito mais implementações de preenchimento automático JavaScript por aí.Plone usa KSS para sua biblioteca JavaScript, o plugin KSS livesearch é um bom lugar para começar se estiver procurando por exemplo de código para extrair.

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

E um tutorial sobre como usar KSS com Django:

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

O KSS é muito bom, pois separa claramente o comportamento do conteúdo no lado do cliente (sem a necessidade de escrever JavaScript), mas o Scriptaculous é conceitualmente um pouco mais simples e tem uma documentação um pouco melhor (http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top