web-dev-qa-db-fra.com

Comment utiliser getContentExtras () dans l'indexation SmartSearch?

J'ai lu sur Google toute la documentation très limitée des routines SmartSearch/com_Finder après avoir démarré avec Comment ajouter des champs com_content supplémentaires à l'index de recherche intelligente , et je ne comprends plus comment étendre l'indexation à des champs supplémentaires dans la recherche intelligente que lorsque j'ai commencé :(

En gros, j'ai des "Titres", qui ont n Programmes pour enfants, chacun ayant n Chapitres. Chacun de ceux-ci ont un contenu que je dois indexer de telle sorte qu'ils renvoient au titre parent auquel ils appartiennent.

TitleA                   (tTitle,tBody,tSummary)
    - ProgramA1          (pTitle,pBody,pSummary)
        - ChapterA1a     (cTitle,cBody,cSummary)
        - ChapterA1b
    - ProgramA2
TitleB
    - ProgramB1

J'ai cloné les exemples inclus dans J3 et j'ai l'indexation "Titre" de niveau supérieur qui fonctionne comme il se doit. Cependant, même après avoir lu le peu qu'il y a à faire pour l'étendre, je ne vois pas comment incorporer le contenu de niveau inférieur. La question mentionnée ci-dessus a une réponse pour fourcher/modifier les routines standard, et une autre qui parle de l'utilisation de addinstruction(). L'OP commente qu'il/elle a écrit un plugin, mais sans précision ni suivi sur la question elle-même.

Je sais que cette question aborde "faire le code" pour moi, mais je suis perdue avec les connaissances implicites qui semblent être requises et le manque de matériel de référence pour comprendre comment faire fonctionner ce travail.

Donc, la question elle-même: à la ligne 24 ci-dessous, FinderIndexerHelper::getContentExtras($item) est l’endroit apparent pour lier les niveaux inférieurs de contenu. Cette routine (dans l’assistant) dit simplement " Méthode permettant d’obtenir des données supplémentaires pour un contenu avant de les indexer. C’est ainsi que nous ajoutons des commentaires, des balises, des étiquettes, etc. qui devraient être disponibles pour le Finder. = = ", déclenche ensuite un autre événement onPrepareFinderContent. Je ne trouve nulle part où cette fonction ou cet événement est utilisé, ni aucune indication de l'endroit où utiliser SQL pour obtenir/lier les données qui m'intéressent. Quelqu'un a-t-il déjà une expérience en la matière? méthode/événement qui peut me donner un exemple clair de la façon de les utiliser avec la hiérarchie du contenu donné?

01    class plgFinderAbc_Titles extends FinderIndexerAdapter
02    {
03        protected $context = 'ABC_TITLES';
04        protected $extension = 'com_abc';
05        protected $layout = 'myFinderLayout';
06        protected $type_title = 'ABC_Finder_TPC_TITLES';
07        protected $table = '#__abc_titles';
08        public function __construct(&$subject, $config) {
09            parent::__construct($subject, $config);
10            $this->loadLanguage();
11        }
12        public function index(FinderIndexerResult $item, $format = 'html') {
13            $db  = JFactory::getDbo();
14            $item->body = FinderIndexerHelper::prepareContent($item->getElement('tBody'));
15            $item->summary = FinderIndexerHelper::prepareContent($item->getElement('tSummary'));
16            $item->addTaxonomy('Type', 'ABC_Finder_TITLE');
17            $item->url = 'index.php?option=com_abc&id=' . $item->getElement('tid');
18            $item->route = $item->url;
19            $item->state = $item->getElement('pub');
20            $item->access = 1;
21            $item->addInstruction(FinderIndexer::META_CONTEXT, 'tMetadesc');
22
23            // Get content extras. ???????????????
24            FinderIndexerHelper::getContentExtras($item);
25            // Index the item.
26            $this->indexer->index($item);
27        }
28        protected function setup() {
29            return true;
30        }
31        protected function getListQuery($sql = null) {
32            $db = JFactory::getDbo();
33            $sql = $sql instanceof JDatabaseQuery ? $sql : $db->getQuery(true);
34            $sql->select('id as tid, title as title, shortdesc as tSummary, fulldesc as tBody, as tMetadesc');$sql->from('#__tpc_titles AS a')->where('state = 1');
35            return $sql;
36        }
37    }
4
GDP

La méthode onPrepareFinderContent est surtout utile si vous essayez de manipuler d’autres types d’enregistrements (c’est-à-dire que vous souhaitez ajouter des données supplémentaires aux articles com_content de votre plug-in). Si vous ajoutez simplement des données à votre propre type d'objet, ajoutez toutes les données à l'objet $item Directement dans votre méthode index().

Dans le cas de vos données hiérarchiques, je vous suggérerais d'étudier les plugins principaux du Finder pour com_content et com_categories et de les utiliser pour vous aider à comprendre ce que vous essayez d'accomplir. Si je me souviens bien des choses, vous voudrez utiliser les méthodes addTaxonomy pour vous aider.

2
Michael