it-swarm.dev

Come aggiungere campi extra com_content a Smart Search Index

Dove posso trovare tutorial o istruzioni per creare un plugin che gestisca "onPrepareFinderContent"?

Ho aggiunto alcuni campi extra agli articoli di com_content e vorrei che fossero indicizzati dal motore Finder.

Sto cercando un modo per aggiungere un nuovo elemento all'oggetto FinderIndexerResult che verrà indicizzato.

Ho visto questa riga di codice nei plugin/Finder/content/content.php alla riga 311:

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

La funzione FinderIndexerHelper :: getContentExtras accetta l'oggetto FinderIndexerResult che verrà indicizzato e quindi attiverà un evento "onPrepareFinderContent", che (suppongo) consente al plug-in 3dparty di aggiungere o modificare il contenuto che verrà indicizzato.

Alcuni di voi hanno qualche esperienza al riguardo o possono indicarmi un buon tutorial/documentazione?

10
Cristiano

Ho fatto un numero di campi extra in com_content. Penso che, poiché il metodo utilizzato per farlo è piuttosto personalizzato quando si specifica la propria tabella e così, non esiste un metodo davvero ripetibile che è possibile utilizzare per ottenere queste informazioni unite in com_Finder.

Il mio suggerimento per te sarebbe di biforcare il plug-in dell'indicizzatore di contenuti per Finder e quindi configurarlo per richiamare i campi che hai aggiunto.

La prima cosa da fare è modificare getListQuery nel Finder per unirti alla tabella dei campi extra:

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

Quindi, a seconda di come salvi i campi extra (oggetto JRegistry?) Dovresti solo dire a Finder di esaminare i campi aggiuntivi che hai nella query:

Ho la sensazione che finiresti per aggiungerlo come qualche meta informazione: https://github.com/joomla/joomla-cms/blob/staging/plugins/Finder/content/content.php#L286

Spero che sia di aiuto

4
Chad Windnagle

Lavorando per un plug-in SobiPro-Smart Search, abbiamo aggiunto campi aggiuntivi in ​​getItems, elaborando gli elementi da indicizzare come FinderIndexerResult e, successivamente, in indice per ogni elemento, aggiungendo Istruzioni di ciascun campo aggiuntivo:

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);
                }
            }
...
3
Anibal