Вопрос

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

Это было полезно?

Решение

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

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

Что касается JavaScript, вы можете создать его самостоятельно или использовать существующую библиотеку JavaScript.В библиотеке JS это обычно называется автозаполнением.Для начала есть автозаполнение YUI и автозаполнение Scriptaculous, а также, вероятно, множество других реализаций автозаполнения 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top