С Joomla! 2.5 релиз, новый компонент поиска был включен, чтобы улучшить поисковую систему на сайте Joomla!. На основе JXtended Finder, Smart Search вполне мощный инструмент и может быть использован для улучшения результатов поиска и показать пользователю, что именно они хочет. Из коробки, Smart Search будет работать на большинстве основных данных, но разработчики сторонних придется создавать свои собственные плагины Finder, чтобы взаимодействовать с помощью смарт-Поиск. Не волнуйтесь, я помогу вам начать работу с, что сейчас!

Что делает Finder плагин?

В Finder Плагине создается логика поиска элементов и автоматическое обновления этой логики во время нормального использования сайта. Без этих плагинов данные компонента не могут быть индексированы и обработаны во время поисков в компоненте Smart Search. Такое же требование существует для «классического» компонента Search, чтобы обеспечить поиск данных.

Что нужно для Finder плагина?

Для каждого плагина существуют свои собственные уникальные требования, но есть некоторый код, которого требует каждый плагин, для надлежащего функционирования. Вместо регистрации многочисленных фрагментов кода я вместо этого соединю Вас с Finder плагином для статей com_content в GitHub: https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php. Я предлогаю Вам исследовать код, поскольку я описываю его здесь.

Свойства класса и внешние зависимости

Как Вы видите чуть ниже блока документа файла, есть два файла, которые требуются загрузить. вызвав загрузчиком jimport  класс JComponentHelper и этот класс используются в методе index . Затем, оператор  require_once загружает родительский класс Finder плагина, FinderIndexerAdapter. Все Finder  плагины  должны расширить этот класс, чтобы функционировать должным образом.

Теперь, я объясню каждый набор свойств класса в этом плагине, а также несколько свойств в родительском классе, для ознакомления:

  • $context - Это - идентификатор для плагина; во всех базовых реализациях это - часть имени класса после plgFinder
  • $extension - Расширение обрабатываемое плагином, например. com_contentr
  • $layout - Имя подразметки, которое будет использоваться, представляя результаты поиска; в базовых реализациях это - имя представления единственного  элемента в фронтэнде компонента (чтобы далее объяснить это, по умолчанию, логика фронтэнда будет искать файл шаблона default_article.php в поисковом представлении com_finder, и если он не существует, то выберет файлу по умолчанию к default_result.php)
  • $type_title - Заголовок типа контента, обрабатываемого плагином; это будет использоваться, чтобы вывести на экран имя опции фильтрации «Типа», когда фильтры будут доступны (примечание, он  связан с языковой строкой; посмотрите соответствующий файл языка для получения дополнительной информации о структуре ключа)
  • $table - Таблица базы данных, в которой хранятся данные компонента (примечание: здесь должен использоваться префикс  # __ )

Дополнительные свойства в родительском классе FinderIndexerAdapter:

  • $mime - Если индексируются различные типы файлов (такие как файлы PDF), это свойство должно, чтобы быть установленным в корректный MIME тех данных - значения по умолчанию - NULL
  • $db - Объект базы данных, все плагины должны взаимодействовать с использованием базы данных
    $this->db
  • $state_field - Это - поле, в котором в базе данных сохранено состояние опубликованности (обычно state или field) - значения по умолчанию - state

Функции класса и информация о родительском классе.

Затем, я опишу каждую из функций в этом классе, а также важные методы, для ознакомления в родительском классе FinderIndexerAdapter. За исключением Finder плагина  для работы с com_categories, каждая из этих функций наследуется из родительского класса, который содержит универсальный код, для  обновления свойств индекса элемента. Разработчики, которые хотят переопределить эти функции, должны тщательно рассмотреть то, что делают родительские классы так, чтобы их данные были должным образом обработаны во всех экземплярах.

  • public function __construct - Стандартный конструктор класса, требуемый большинством плагинов, чтобы загрузить файлы языка плагина из их расположения по умолчанию.
  • public function onFinderCategoryChangeState - Введено в Joomla! 2.5, этот метод инициируется в то же время, что и событие onCategoryChangeState, которое инициируется, когда изменено  состояние опубликованности категории в администраторском списке представлении, раньше обновляло индексные свойства дочерних элементов категории (очевидно, не нужно для компонентов, у которых нет структуры category->item),.
  • public function onFinderAfterDelete - Это событие активируется в то же время, что и onContentAfterDelete и по умолчанию, удаляет индексные данные для элементов, которые были удалены или в компоненте или в разделе  Умного Поиска админинки.
  • public function onFinderAfterSave - Это событие активируется в то же время, что и onContentAfterSave и по умолчанию, обновляет информацию об уровне доступа для элементов, когда уровень доступа элемента изменен или когда уровень доступа его родительской категории изменен. Проверка контекста на единственный элемент должна включать и бэкэнд и фронтэнд представления редактирования единственного элемента, чтобы работать должным образом.
  • public function onFinderBeforeSave - Это событие активируется в то же время, что и onContentBeforeSave и по умолчанию,перед запросом на сохранениет элемента или уровня доступа родительской категории; используемый в сочетании с onFinderAfterSave, чтобы изменить индексные данные, когда уровень доступа изменен
  • public function onFinderChangeState - Это событие активируется в то же время, что и onContentChangeState и по умолчанию, обновляет информацию состояния опубликованности для элементов, когда состояние опубликованности  изменено в представлении списка администратора. Кроме того, этот метод выполняется при отключении плагина, он удаляет индексные данные, созданные отключенным плагином.
  • protected function index - Это - метод, который производит всю обработку, для  добавления элементов к поисковому индексу. Это  такие вещи, как внутренний URL элемента, человекопонятный URL и установка метаданных .
  • protected function setup - Этот метод выполняется до метода index и подготавливает индексатор к обработке данныех плагина. В базовом исполнении включен помощник маршрутзации для каждого расширения так, чтобы маршрутизация могла быть должным образом установлена в индексе.
  • protected function getListQuery - Этот метод устанавливает объект JDatabaseQuery с запросом, чтобы получить по нему данные, которые должны быть проиндексированы. Здесь должны использоваться  JDatabase и JDatabaseQuery,  иначе индексатор перестанет работать.

Методы, о которых разработчики должны знать из родительского класса FinderIndexerAdapter:

  • protected function getStateQuery - Этот метод устанавливает объект JDatabaseQuery с запросом, чтобы получить по нему состояние опубликованности и уровни доступа элемента и его родительской категории. Компоненты, не используют структуру category->item должны будут переопределить этот метод в своих плагинах.
  • protected function getUpdateQueryByTime - Этот метод устанавливает объект JDatabaseQuery с запросом, чтобы получить по нему время обновления из поля таблицы «modified» базы данных. Компоненты, которые или не хранят эти данные или используют другое имя поля, должны будут переопределить этот метод в своих плагинах.
  • protected function getURL - Этот метод возвращает non-SEF URL элемента. Используя com_content со статьей ID 1, возврат по умолчанию «index.php? option=com_content&view=article&id=1. Разработчики, которые должны добавить дополнительную информацию к URL, должны будут переопределить этот метод в своих плагинах.

Обратите внимание на то, что это ни в коем случае не полный список полного API для компонента Smart Search, но просто выделение методов, о которых разработчики должны знать как минимум, чтобы написать функционирующие плагины для их компонентов.

У меня есть вопросы!!!

Несомненно, будет вопрос или три, который спросят об Умном Поиске. Очевидно, лучшими ресурсами, чтобы использовать будет Joomla! Форумы (http://forum.joomla.org) и Joomla! WIKI (http://docs.joomla.org). Несколько страниц уже существуют на WIKI с информацией об Умном Поиске, и я лично часто посещаю форумы и читаю многие потоки, и готово помочь отвечать на вопросы об Умном Поиске. Так, не будьте застенчивы, спросите далеко!

 

Оригинал статьи

Этот метод устанавливает объект JDatabaseQuery с запросом, чтобы получить по запросу данные, которые должны быть индексированы. JDatabase и API JDatabaseQuery должны использоваться здесь иначе, индексатор перестанет работать.