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

10

¿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 FinderIndexerResultobjeto 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?

Cristiano
fuente

Respuestas:

4

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 el buscador y luego configurarlo para que llame a los campos que ha agregado.

Lo primero que debería hacer es modificar getListQuery en el buscador 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 al buscador 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

Chad Windnagle
fuente
3

Al trabajar para un complemento SobiPro-Smart Search, hemos agregado campos adicionales en getItems , procesando los elementos que se indexarán como FinderIndexerResult y, posteriormente, en el índice de 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);
                }
            }
...
Anibal
fuente
Gracias, su respuesta me indicó la dirección correcta;) Eventualmente escribí un complemento de buscador (extiende JPlugin) que implementa el evento onPrepareFinderContent (disparado por FinderIndexerHelper :: getContentExtras). Luego agregué instrucciones como mostraste y los campos adicionales correspondientes: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano
¡Excelente! ¿Tienes que marcar la pregunta como resuelta?
Anibal
@ Cristiano: ¿Alguna vez resolviste esto? No hay una respuesta aceptada, y me enfrento al mismo problema: ¿alguna vez descubriste cómo usar estas rutinas?
PIB
Incluso si el autor original no acepta la respuesta ... así es como funciona en mi complemento de búsqueda inteligente ;-)
Anibal