web-dev-qa-db-fra.com

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

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 de recherche.

Je cherche un moyen d'ajouter un nouvel élément à l'objet FinderIndexerResult à indexer.

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 à indexer.

Certains d’entre vous ont une expérience dans ce domaine ou peuvent me recommander de bons tutoriels/documentation?

10
Cristiano

J'ai fait un certain nombre de champs supplémentaires dans com_content. Étant donné que la méthode utilisée pour ce faire est assez courante, vous spécifiez votre propre table, vous ne pouvez pas utiliser une méthode vraiment répétable que vous pouvez utiliser pour obtenir cette information fusionnée dans com_Finder.

Je vous suggérerais de créer le plug-in d'indexeur de contenu pour le Finder, puis de le configurer pour appeler les champs que vous avez ajoutés.

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

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

Ensuite, en fonction de la manière dont vous avez sauvegardé vos champs supplémentaires (objet JRegistry?), Il vous suffirait d'indiquer au Finder d'examiner les champs supplémentaires que vous avez dans la requête:

J'ai l'impression que vous finirez par l'ajouter sous forme de méta-information: https://github.com/joomla/joomla-cms/blob/staging/plugins/Finder/content/content.php#L286

J'espère que cela t'aides

4
Chad Windnagle

En travaillant pour un plug-in SobiPro-Smart Search, nous avons ajouté des champs supplémentaires dans getItems, en traitant les éléments à indexer en tant que FinderIndexerResult, et plus tard dans index, en ajoutant Instructions de 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);
                }
            }
...
3
Anibal