스마트 검색 색인에 com_content 추가 필드를 추가하는 방법


10

"onPrepareFinderContent"를 처리하는 플러그인을 빌드하기위한 튜토리얼이나 지시 사항을 어디서 찾을 수 있습니까?

com_content 기사에 몇 가지 추가 필드를 추가했으며 Finder 엔진에서 색인을 생성하기를 원합니다.

FinderIndexerResult색인을 생성 할 객체에 새 요소를 추가하는 방법을 찾고 있습니다.

311 행의 plugins / finder / content / content.php에서이 코드 행을 보았습니다.

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

FinderIndexerHelper :: getContentExtras 함수는 색인화 될 FinderIndexerResult 객체를 받아 들인 다음 "onPrepareFinderContent"이벤트를 트리거하여 3dparty 플러그인이 색인화 할 컨텐츠를 추가하거나 수정할 수있게합니다.

당신 중 일부는 이것에 대한 경험이 있거나 좋은 튜토리얼 / 문서를 알려 줄 수 있습니까?

답변:


4

com_content에서 여러 추가 필드를 수행했습니다. 이 작업을 수행하는 데 사용 된 방법은 자신의 테이블을 지정하는 데 꽤 사용자 지정이기 때문에이 정보를 com_finder에 병합하는 데 사용할 수있는 실제로 반복 가능한 방법은 없습니다.

내 제안은 finder 용 컨텐츠 인덱서 플러그인을 포크 한 다음 추가 한 필드를 호출하도록 설정하는 것입니다.

가장 먼저 할 일은 파인더에서 getListQuery를 수정하여 추가 필드 테이블에 조인하는 것입니다.

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

그런 다음 추가 필드 (JRegistry 객체?)를 저장하는 방법에 따라 파인더에게 쿼리에있는 추가 필드를 보도록 지시해야합니다.

나는 당신이 메타 정보로 그것을 추가하게 될 것이라고 생각합니다 : https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L286

도움이 되었기를 바랍니다


3

SobiPro-Smart Search 플러그인을 위해 작업하면서 getItems 에 추가 필드를 추가 하여 FinderIndexerResult로 색인화 할 항목을 처리 한 다음 나중에 각 항목에 대한 색인 에서 각 추가 필드에 대한 지시 사항 을 추가했습니다.

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);
                }
            }
...

고마워요, 당신의 대답은 올바른 방향으로 나를 고정 시켰습니다.) 결국 onPrepareFinderContent 이벤트 (FinderIndexerHelper :: getContentExtras에 의해 실행)를 구현하는 파인더 플러그인 (JPlugin을 확장)을 작성했습니다. 나는 당신이 보여준 지시와 해당하는 추가 필드를 추가했습니다 : public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano

우수한! 질문을 해결 된 것으로 표시해야합니까?
Anibal

@Cristiano :이 문제를 해결 한 적이 있습니까? 받아 들여지는 대답이 없으며 같은 문제에 직면하고 있습니다. 이러한 루틴을 사용하는 방법을 알고 계셨습니까?
GDP

원래 저자가 대답을 받아들이지 않더라도 ... 이것이 내 스마트 검색 플러그인에서 작동하는 방식입니다. ;-)
Anibal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.