スマート検索インデックスにcom_content追加フィールドを追加する方法


10

「onPrepareFinderContent」を処理するプラグインを作成するためのチュートリアルや手順はどこにありますか?

com_content記事にいくつかの追加フィールドを追加しました。これらのフィールドをFinderエンジンによってインデックスに登録してもらいたいのです。

FinderIndexerResultインデックスを作成するオブジェクトに新しい要素を追加する方法を探しています。

このコード行は、plugins / finder / content / content.phpの311行目にあります。

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

FinderIndexerHelper :: getContentExtras関数は、インデックスを作成するFinderIndexerResultオブジェクトを受け入れ、「onPrepareFinderContent」イベントをトリガーします。これにより、(サードパーティプラグインがインデックスを作成するコンテンツを追加または変更できるようになります)。

あなたの何人かはこれについての経験を持っていますか、または私にいくつかの良いチュートリアル/ドキュメントを指摘できますか?

回答:


4

com_contentでいくつかの追加フィールドを実行しました。これを行うために使用するメソッドは、独自のテーブルなどを指定するときにかなりカスタムであるため、この情報をcom_finderにマージするために使用できる本当に反復可能なメソッドはないと思います。

私の提案は、ファインダーのコンテンツインデクサープラグインをフォークし、追加したフィールドを呼び出すように設定することです。

最初に行うのは、ファインダーのgetListQueryを変更して、追加のフィールドテーブルに結合することです。

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

その後、追加のフィールド(JRegistryオブジェクト?)を保存する方法に応じて、クエリで取得した追加のフィールドを確認するようにfinderに指示する必要があります。

メタ情報として追加してしまうような気がします。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イベントを実装するファインダープラグイン(JPluginを拡張)を作成しました(FinderIndexerHelper :: getContentExtrasによって起動されます)。私は、あなたが示したよう指示し、対応する余分なフィールドを追加しました: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
クリスティアーノ

優秀な!質問を解決済みとしてマークする必要がありますか?
アニバル2014

@Cristiano:これを解決したことはありますか?受け入れられた答えはなく、私は同じ問題に直面しています-これらのルーチンの使い方を理解したことがありますか?
GDP

元の作成者が答えを受け入れなかったとしても、それが私のスマート検索プラグインでの動作です;-)
Anibal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.