Comment ajouter des champs supplémentaires com_content à l'index de recherche intelligente


10

Où puis-je trouver un tutoriel ou des instructions pour construire un plugin qui gère "onPrepareFinderContent"?

J'ai ajouté des champs supplémentaires aux articles com_content et j'aimerais qu'ils soient indexés par le moteur du Finder.

Je cherche un moyen d'ajouter un nouvel élément à l' FinderIndexerResultobjet qui va être indexé.

J'ai vu cette ligne de code dans plugins / finder / content / content.php à la ligne 311:

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

La fonction FinderIndexerHelper :: getContentExtras accepte l'objet FinderIndexerResult qui va être indexé, puis déclenche un événement "onPrepareFinderContent", qui (je suppose) permet au plugin 3dparty d'ajouter ou de modifier le contenu qui va être indexé.

Certains d'entre vous ont une expérience à ce sujet ou peuvent me diriger vers un bon tutoriel / documentation?

Réponses:


4

J'ai fait un certain nombre de champs supplémentaires dans com_content. Je pense que parce que la méthode utilisée pour ce faire est assez personnalisée lorsque vous spécifiez votre propre table et ainsi, il n'y a pas de méthode vraiment reproductible que vous pouvez utiliser pour obtenir ces informations fusionnées dans com_finder.

Ma suggestion serait de bifurquer le plugin d'indexeur de contenu pour le Finder, puis de le configurer pour appeler les champs que vous avez ajoutés.

La première chose que vous feriez est de modifier la getListQuery dans le Finder pour la joindre à votre table de champs supplémentaires:

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

Ensuite, selon la façon dont vous enregistrez vos champs supplémentaires (objet JRegistry?), Il vous suffira de dire au chercheur de regarder les champs supplémentaires que vous avez dans la requête:

J'ai l'impression que vous finiriez par l'ajouter en tant que méta-informations: https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L286

J'espère que cela t'aides


3

En travaillant pour un plugin SobiPro-Smart Search, nous avons ajouté des champs supplémentaires dans getItems , traitant les éléments à indexer en tant que FinderIndexerResult, et plus tard, dans l' index pour chaque élément, en ajoutant des instructions pour chaque champ supplémentaire:

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

Merci, votre réponse m'a orienté dans la bonne direction;) J'ai finalement écrit un plugin de recherche (étend JPlugin) qui implémente l'événement onPrepareFinderContent (déclenché par FinderIndexerHelper :: getContentExtras). J'ai ensuite ajouté des instructions comme vous l'avez montré et les champs supplémentaires correspondants: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano

Excellent! Devez-vous marquer la question comme résolue?
Anibal

@Cristiano: Avez-vous déjà résolu cela? Il n'y a pas de réponse acceptée, et je suis confronté au même problème - avez-vous déjà compris comment utiliser ces routines?
PIB du

Même si la réponse n'est pas acceptée par l'auteur original ... c'est comme ça que ça marche sur mon plugin de recherche intelligente ;-)
Anibal
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.