ti-enxame.com

Como adicionar campos extras com_content ao Índice de pesquisa inteligente

Onde posso encontrar algum tutorial ou instruções para criar um plug-in que lida com "onPrepareFinderContent"?

Adicionei alguns campos extras aos artigos com_content e gostaria que eles fossem indexados pelo mecanismo do Finder.

Estou procurando uma maneira de adicionar um novo elemento ao objeto FinderIndexerResult que será indexado.

Eu vi essa linha de código em plugins/Finder/content/content.php na linha 311:

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

A função FinderIndexerHelper :: getContentExtras aceita o objeto FinderIndexerResult que será indexado e, em seguida, aciona um evento "onPrepareFinderContent", que (suponho) permite que o plugin 3dparty adicione ou modifique o conteúdo que será indexado.

Alguns de vocês têm alguma experiência nisso ou podem me indicar algum bom tutorial/documentação?

10
Cristiano

Eu fiz vários campos extras no com_content. Eu acho que porque o método usado para fazer isso é bastante personalizado, pois você especifica sua própria tabela e, portanto, não existe um método realmente repetitivo que você possa usar para obter essas informações mescladas no com_Finder.

Minha sugestão para você seria dividir o plug-in do indexador de conteúdo do Finder e configurá-lo para chamar os campos que você adicionou.

A primeira coisa que você faria é modificar o getListQuery no Finder para ingressar na sua tabela de campos extras:

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

Depois disso, dependendo de como você salva seus campos extras (objeto JRegistry?), Basta pedir ao Finder para examinar os campos adicionais que você possui na consulta:

Sinto que você acabaria adicionando-o como algumas informações meta: https://github.com/joomla/joomla-cms/blob/staging/plugins/Finder/content/content.php#L286

Espero que isto ajude

4
Chad Windnagle

Trabalhando para um plug-in SobiPro-Smart Search, adicionamos campos extras em getItems, processando itens a serem indexados como FinderIndexerResult e, posteriormente, em index para cada item, adicionando Instruções de cada campo extra:

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