Как добавить дополнительные поля com_content в Smart Search Index

10

Где я могу найти любой учебник или инструкции по созданию плагина, который обрабатывает "onPrepareFinderContent"?

Я добавил несколько дополнительных полей в статьи com_content и хотел бы, чтобы они были проиндексированы механизмом Finder.

Я ищу способ добавить новый элемент в FinderIndexerResultобъект, который будет проиндексирован.

Я видел эту строку кода в plugins / finder / content / content.php в строке 311:

// Get content extras.
FinderIndexerHelper::getContentExtras($item);

Функция FinderIndexerHelper :: getContentExtras принимает объект FinderIndexerResult, который будет проиндексирован, и затем инициирует событие «onPrepareFinderContent», которое (я полагаю) позволяет плагину 3dparty добавлять или изменять содержимое, которое будет проиндексировано.

Кто-то из вас имеет какой-либо опыт в этом или может указать мне хороший учебник / документацию?

Cristiano
источник

Ответы:

4

Я сделал несколько дополнительных полей в com_content. Я думаю, потому что метод, используемый для этого, довольно специфичен, так как вы указываете свою собственную таблицу и так далее, нет действительно повторяемого метода, который вы можете использовать, чтобы объединить эту информацию с com_finder.

Я бы предложил вам подключить плагин индексатора контента для поиска, а затем настроить его для обращения к полям, которые вы добавили.

Первое, что вы должны сделать, это изменить getListQuery в поисковике, чтобы присоединиться к вашей таблице дополнительных полей:

https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L341

Затем, после этого, в зависимости от того, как вы сохраняете свои дополнительные поля (объект JRegistry?), Вам просто нужно указать finder, чтобы он посмотрел на дополнительные поля, которые вы получили в запросе:

У меня есть ощущение, что вы добавите его в качестве мета-информации: https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L286

Надеюсь это поможет

Чед Винднагл
источник
3

Работая с плагином SobiPro-Smart Search, мы добавили дополнительные поля в getItems , обрабатывая элементы, которые нужно проиндексировать как FinderIndexerResult, а позже, в индекс для каждого элемента, добавив инструкции для каждого дополнительного поля:

protected function index(FinderIndexerResult $item, $format = 'html')
{
...

            $fields = $this->_fields[$item->section];

            foreach ($fields as $f)
            {
                $nid = $f->get('nid');

                if (isset($item->$nid))
                {
                    $item->addInstruction(FinderIndexer::TEXT_CONTEXT, $nid);
                }
            }
...
Анибал
источник
Спасибо, ваш ответ направил меня в правильном направлении;) В конце концов я написал плагин поиска (расширяет JPlugin), который реализует событие onPrepareFinderContent (инициируется FinderIndexerHelper :: getContentExtras). Затем я добавил инструкции, как вы показали, и соответствующие дополнительные поля: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Криштиану
Отлично! Вы должны пометить вопрос как решенный?
Анибал
@Cristiano: Вы когда-нибудь решали это? Там нет принятого ответа, и я столкнулся с той же проблемой - вы когда-нибудь выясняли, как использовать эти процедуры?
ВВП
Даже если первоначальный автор не принял ответ ... вот как он работает на моем умном поисковом плагине ;-)
Anibal