Como adicionar campos extras com_content ao Índice de pesquisa inteligente


10

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

Respostas:


4

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 bifurcar o plugin do indexador de conteúdo para o finder e configurá-lo para chamar os campos que você adicionou.

A primeira coisa que você faria é modificar o getListQuery no localizador 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 localizador para verificar 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


3

Trabalhando para um plug-in SobiPro-Smart Search, adicionamos campos extras em getItems , processando itens a serem indexados como FinderIndexerResult e, posteriormente, no índice de 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);
                }
            }
...

Obrigado, sua resposta me levou à direção certa;) Acabei escrevendo um plugin localizador (estende o JPlugin) que implementa o evento onPrepareFinderContent (acionado por FinderIndexerHelper :: getContentExtras). Em seguida, adicionei instruções, como você mostrou, e os campos extras correspondentes: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano

Excelente! Você precisa marcar a pergunta como resolvida?
Anibal

@ Cristiano: Você já resolveu isso? Não há resposta aceita, e estou enfrentando o mesmo problema - você já descobriu como usar essas rotinas?
GDP

Mesmo se a resposta não for aceite pelo autor original ... é assim que funciona na minha busca inteligente plug-in ;-)
Anibal
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.