So fügen Sie dem Smart Search-Index zusätzliche Felder für com_content hinzu

10

Wo finde ich ein Tutorial oder Anweisungen zum Erstellen eines Plugins für "onPrepareFinderContent"?

Ich habe com_content-Artikeln einige zusätzliche Felder hinzugefügt und möchte, dass sie von der Finder-Engine indiziert werden.

Ich suche nach einer Möglichkeit, FinderIndexerResultdem zu indizierenden Objekt ein neues Element hinzuzufügen .

Ich habe diese Codezeile in plugins / finder / content / content.php in Zeile 311 gesehen:

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

Die Funktion FinderIndexerHelper :: getContentExtras akzeptiert das zu indizierende FinderIndexerResult-Objekt und löst dann ein "onPrepareFinderContent" -Ereignis aus, mit dem das 3dparty-Plugin (ich nehme an) den zu indizierenden Inhalt hinzufügen oder ändern kann.

Einige von Ihnen haben Erfahrung damit oder können mich auf ein gutes Tutorial / eine gute Dokumentation verweisen?

Cristiano
quelle

Antworten:

4

Ich habe eine Reihe zusätzlicher Felder in com_content erstellt. Ich denke, da die dafür verwendete Methode ziemlich benutzerdefiniert ist, wenn Sie Ihre eigene Tabelle angeben, gibt es keine wirklich wiederholbare Methode, mit der Sie diese Informationen in com_finder zusammenführen können.

Mein Vorschlag an Sie wäre, das Inhaltsindex-Plugin für den Finder aufzuteilen und es dann so einzurichten, dass es die von Ihnen hinzugefügten Felder aufruft.

Als erstes müssen Sie die getListQuery im Finder ändern, um sie mit Ihrer Tabelle für zusätzliche Felder zu verknüpfen:

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

Danach müssen Sie, abhängig davon, wie Sie Ihre zusätzlichen Felder speichern (JRegistry-Objekt?), Den Finder nur anweisen, sich die zusätzlichen Felder anzusehen, die Sie in der Abfrage haben:

Ich habe das Gefühl, Sie würden es am Ende als Meta-Informationen hinzufügen: https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L286

Hoffe das hilft

Chad Windnagle
quelle
3

Bei der Arbeit mit einem SobiPro-Smart Search-Plugin haben wir zusätzliche Felder in getItems hinzugefügt , Elemente verarbeitet, die als FinderIndexerResult indiziert werden sollen, und später im Index für jedes Element Anweisungen für jedes zusätzliche Feld hinzugefügt :

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);
                }
            }
...
Anibal
quelle
Vielen Dank, Ihre Antwort hat mich in die richtige Richtung gelenkt;) Ich habe schließlich ein Finder-Plugin geschrieben (erweitert JPlugin), das das Ereignis onPrepareFinderContent (ausgelöst von FinderIndexerHelper :: getContentExtras) implementiert. Ich habe dann Anweisungen hinzugefügt, wie Sie gezeigt haben, und die entsprechenden zusätzlichen Felder: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano
Ausgezeichnet! Müssen Sie die Frage als gelöst markieren?
Anibal
@Cristiano: Hast du das jemals gelöst? Es gibt keine akzeptierte Antwort und ich stehe vor dem gleichen Problem - haben Sie jemals herausgefunden, wie man diese Routinen verwendet?
BIP
Auch wenn die Antwort vom Originalautor nicht akzeptiert wird ... so funktioniert es auf meinem Smart Search Plugin ;-)
Anibal