it-swarm-es.tech

Cómo agregar campos adicionales com_content al Índice de búsqueda inteligente

¿Dónde puedo encontrar algún tutorial o instrucciones para crear un complemento que maneje "onPrepareFinderContent"?

He agregado algunos campos adicionales a los artículos com_content y me gustaría que el motor Finder los indexe.

Estoy buscando una manera de agregar un nuevo elemento al objeto FinderIndexerResult que se va a indexar.

He visto esta línea de código en plugins/Finder/content/content.php en la línea 311:

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

La función FinderIndexerHelper :: getContentExtras acepta el objeto FinderIndexerResult que se va a indexar y luego activa un evento "onPrepareFinderContent", que (supongo) permite que el complemento 3dparty agregue o modifique el contenido que se va a indexar.

¿Alguno de ustedes tiene alguna experiencia en esto o puede señalarme algún buen tutorial/documentación?

10
Cristiano

He realizado varios campos adicionales en com_content. Creo que debido a que el método utilizado para hacer esto es bastante personalizado ya que especifica su propia tabla y tal, no hay un método realmente repetible que pueda usar para fusionar esta información en com_Finder.

Mi sugerencia para usted sería bifurcar el complemento del indexador de contenido para Finder y luego configurarlo para que llame a los campos que ha agregado.

Lo primero que debe hacer es modificar getListQuery en el Finder para unirse a su tabla de campos adicionales:

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

Luego, después de eso, dependiendo de cómo guarde sus campos adicionales (¿objeto JRegistry?) Solo tendría que decirle a Finder que mire los campos adicionales que tiene en la consulta:

Tengo la sensación de que terminarás agregándolo como información meta: https://github.com/joomla/joomla-cms/blob/staging/plugins/Finder/content/content.php#L286

Espero que esto ayude

4
Chad Windnagle

Al trabajar para un complemento SobiPro-Smart Search, hemos agregado campos adicionales en getItems, procesando los elementos que se indexarán como FinderIndexerResult, y más tarde, en index para cada elemento, agregando Instrucciones de cada campo adicional:

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