Come aggiungere campi extra com_content a Smart Search Index


10

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 FinderIndexerResultall'oggetto 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?

Risposte:


4

Ho fatto un numero di campi extra in com_content. Penso che il metodo usato per fare questo sia piuttosto personalizzato quando specifichi la tua tabella e così, non esiste un metodo davvero ripetibile che puoi usare per ottenere queste informazioni unite in com_finder.

Il mio suggerimento per te sarebbe quello di fork 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 unire la 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 tuoi campi extra (oggetto JRegistry?) Dovresti solo dire a Finder di guardare 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


3

Lavorando per un plug-in SobiPro-Smart Search, abbiamo aggiunto campi aggiuntivi in getItems , elaborando elementi da indicizzare come FinderIndexerResult e, successivamente, in indice per ciascun elemento, aggiungendo le istruzioni per 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);
                }
            }
...

Grazie, la tua risposta mi ha indirizzato nella giusta direzione;) Alla fine ho scritto un plug-in finder (estende JPlugin) che implementa l'evento onPrepareFinderContent (generato da FinderIndexerHelper :: getContentExtras). Ho quindi aggiunto le istruzioni come hai mostrato e i campi aggiuntivi corrispondenti: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano,

Eccellente! Devi contrassegnare la domanda come risolta?
Anibal

@Cristiano: l'hai mai risolto? Non c'è una risposta accettata e mi trovo di fronte allo stesso problema: hai mai capito come usare queste routine?
PIL

Anche se la risposta non è stata accettata dall'autore originale ... è così che funziona sul mio plugin di ricerca intelligente ;-)
Anibal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.