web-dev-qa-db-ja.com

スマートサーチのインデックス作成でgetContentExtras()を使用するには?

com_contentの追加フィールドをスマート検索インデックスに追加する方法 で始めた後、SmartSearch/com_Finderルーチンの非常に限られたドキュメントをすべてGoogleで読みましたが、インデックスを追加フィールドに拡張する方法についてはこれ以上説明しません私が始めたときよりもスマート検索で:(

基本的に、私はn子プログラムを持つ「タイトル」を持っています。各プログラムにはn章があります。これらにはそれぞれ、コンテンツが含まれている親のTitleを指すようにインデックス付けする必要があるコンテンツがあります。

_TitleA                   (tTitle,tBody,tSummary)
    - ProgramA1          (pTitle,pBody,pSummary)
        - ChapterA1a     (cTitle,cBody,cSummary)
        - ChapterA1b
    - ProgramA2
TitleB
    - ProgramB1
_

J3に含まれている例のクローンを作成し、トップレベルの「タイトル」のインデックス付けが正常に機能するようにしましたが、それを拡張することについて少し読んでも、組み込む方法がわかりません。下位レベルのコンテンツ。上記の質問には、標準ルーチンのfork/modifyに対する回答と、addinstruction()の使用についての別の質問があります。 OPは、プラグインを作成したとコメントしていますが、質問自体の詳細やフォローアップはありません。

私はこの質問が「コードを実行する」に近づいていることを知っていますが、必要と思われる暗黙の知識と、この作業を行う方法を理解するための参照資料が不足していることに途方に暮れています。

したがって、質問自体:下の24行目のFinderIndexerHelper::getContentExtras($item)は、下位レベルのコンテンツにリンクするための明白な場所です。そのヘルパー内のルーチンは、単に「インデックスを作成する前にコンテンツの追加データを取得するメソッドです。これは、Finderで使用できるコメント、タグ、ラベルなどを追加する方法です。 "、次に別のイベントonPrepareFinderContentをトリガーします。この関数またはイベントが使用されている場所、またはSQLを使用して興味のあるデータを取得/リンクする場所を示す場所はどこにも見つかりません。これについて何か経験がありますか?特定のコンテンツの階層でそれらを使用する方法の明確な例を私に与えることができるメソッド/イベント?

_01    class plgFinderAbc_Titles extends FinderIndexerAdapter
02    {
03        protected $context = 'ABC_TITLES';
04        protected $extension = 'com_abc';
05        protected $layout = 'myFinderLayout';
06        protected $type_title = 'ABC_Finder_TPC_TITLES';
07        protected $table = '#__abc_titles';
08        public function __construct(&$subject, $config) {
09            parent::__construct($subject, $config);
10            $this->loadLanguage();
11        }
12        public function index(FinderIndexerResult $item, $format = 'html') {
13            $db  = JFactory::getDbo();
14            $item->body = FinderIndexerHelper::prepareContent($item->getElement('tBody'));
15            $item->summary = FinderIndexerHelper::prepareContent($item->getElement('tSummary'));
16            $item->addTaxonomy('Type', 'ABC_Finder_TITLE');
17            $item->url = 'index.php?option=com_abc&id=' . $item->getElement('tid');
18            $item->route = $item->url;
19            $item->state = $item->getElement('pub');
20            $item->access = 1;
21            $item->addInstruction(FinderIndexer::META_CONTEXT, 'tMetadesc');
22
23            // Get content extras. ???????????????
24            FinderIndexerHelper::getContentExtras($item);
25            // Index the item.
26            $this->indexer->index($item);
27        }
28        protected function setup() {
29            return true;
30        }
31        protected function getListQuery($sql = null) {
32            $db = JFactory::getDbo();
33            $sql = $sql instanceof JDatabaseQuery ? $sql : $db->getQuery(true);
34            $sql->select('id as tid, title as title, shortdesc as tSummary, fulldesc as tBody, as tMetadesc');$sql->from('#__tpc_titles AS a')->where('state = 1');
35            return $sql;
36        }
37    }
_
4
GDP

onPrepareFinderContentメソッドは主に役立ちますが、他のレコードタイプを操作しようとしている場合(つまり、プラグインからcom_content記事に追加のデータを追加したい場合)です。独自のオブジェクトタイプにデータを追加するだけの場合は、index()メソッドで$itemオブジェクトに直接データを追加します。

階層データの場合は、com_contentとcom_categoriesのコアFinderプラグインを調べ、それらを使用して、達成しようとしていることを整理することをお勧めします。ヒントを正しく覚えている場合は、addTaxonomyメソッドを使用してこれを支援することをお勧めします。

2
Michael