Як додати додаткові поля com_content до індексу розумного пошуку


10

Де я можу знайти будь-який підручник або інструкцію зі створення плагіна, який обробляє "onPrepareFinderContent"?

До статей com_content я додав кілька додаткових полів, і я хотів би, щоб їх індексував движок Finder.

Я шукаю спосіб додати новий елемент до FinderIndexerResultоб'єкта, який буде індексуватися.

Я бачив цей рядок коду в плагінах / finder / content / content.php у рядку 311:

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

Функція FinderIndexerHelper :: getContentExtras приймає об'єкт FinderIndexerResult, який буде індексуватися, а потім запустить подію "onPrepareFinderContent", яка (я думаю) дозволяє плагіну 3dparty додавати або змінювати вміст, який буде індексуватися.

Хтось із вас має досвід роботи з цього питання чи може вказати на якийсь хороший підручник / документацію?

Відповіді:


4

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

Я пропоную вам роздрібнити плагін для індексатора вмісту для пошуку, а потім налаштувати його для виклику в додані вами поля.

Перше, що ви зробите - це змінити getListQuery в пошуку, щоб приєднатися до таблиці додаткових полів:

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

Потім після цього, залежно від того, як ви зберігаєте зайві поля (об’єкт JRegistry?), Вам просто доведеться сказати пошуку, щоб переглянути додаткові поля, отримані в запиті:

У мене є відчуття, що ви додасте його як деяку мета-інформацію: 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.