Похоже на Plone окно поиска в Django? - PullRequest
1 голос
/ 16 сентября 2008

У Plone есть красивое окно поиска с функциональностью, подобной "предложению Google", для своего сайта. Он даже индексирует загруженные документы, такие как PDF. Кто-нибудь знает модуль, который может обеспечить такую ​​функциональность на сайте Django?

1 Ответ

1 голос
/ 16 сентября 2008

Plone реализует свою функцию LiveSearch, поддерживая отдельную таблицу метаданных с индексированными атрибутами (такие поля, как последнее изменение, создатель, заголовок, копируются из объектов содержимого в эту таблицу). Затем объекты содержимого отправляют события ObjectAdded / ObjectModified / ObjectRemoved, и подписчик событий прослушивает эти события и отвечает за обновление таблицы метаданных (в Django события называются сигналами). Затем существует представление браузера по фиксированному URL-адресу, которое ищет метаданные и возвращает соответствующий HTML-код LiveSearch, и, наконец, каждой HTML-странице отправляется соответствующий JavaScript-код для обработки функциональности автозаполнения AJAX для запроса этого представления и размещения результатов HTML в DOM.

Если вы хотите, чтобы ваш LiveSearch выполнял запросы к нескольким моделям / типам контента, вам, вероятно, понадобится отправлять собственные события и соответствующим образом обрабатывать их у подписчика. Это не обязательно для небольших наборов данных или сайтов с меньшим трафиком, где снижение производительности при выполнении нескольких запросов для одного поиска не является проблемой (или вы хотите искать только один тип контента), и вы можете просто сделать несколько запросы из вашего просмотра.

Что касается стороны JavaScript, вы можете свернуть свои собственные или использовать существующую библиотеку JavaScript. Обычно это называется автозаполнением в библиотеке JS. Для начинающих есть YUI autocomplete и Scriptaculous autocomplete, и, вероятно, есть еще много реализаций JavaScript с автозаполнением. Plone использует KSS для своей библиотеки JavaScript, плагин KSS livesearch является хорошим местом для начала, если вы ищете пример кода для извлечения.

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

И учебник по использованию KSS с Django:

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

KSS довольно хорош, поскольку он четко отделяет поведение от контента на стороне клиента (без необходимости писать JavaScript), но Scriptaculous концептуально немного проще и имеет несколько лучшую документацию (http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter).

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...