web-dev-qa-db-ja.com

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

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

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

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

Plugins/Finder/content/content.phpの311行目でこのコード行を確認しました。

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

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

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

10
Cristiano

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

Finderのコンテンツインデクサープラグインをフォークし、追加したフィールドを呼び出すように設定することをお勧めします。

まず、FinderでgetListQueryを変更して、追加のフィールドテーブルに結合します。

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

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

私はあなたがそれをいくつかのメタ情報として追加することになると思います: .php#L286

お役に立てれば

4
Chad Windnagle

SobiPro-Smart Searchプラグインを使用して、追加のフィールドをgetItemsに追加し、FinderIndexerResultとしてインデックス付けされるアイテムを処理し、後で各アイテムのindexに追加しました。 説明各追加フィールドの:

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