行き詰まった。私は単純なコーディングcom_content記事ページにのみ配置/表示されるモジュールをコーディングしています。このモジュールは現在の記事からキーワードをフェッチし、追加のデータベースクエリを回避するために、JDocument/getMetaDataを使用します。
$item = JFactory::getDocument();
$item_keywords = $item->getMetaData('keywords');
このコードは、モジュールが通常のモジュール位置に配置されており、キーワードのリストを取得できる場合にうまく機能します。
architecture, design studio, house
ただし、{loadposition}を介して記事コンテンツにモジュールを挿入したときプラグインでは、モジュールがJDocument/getMetaDataを使用して現在の記事からキーワードを取得できないことがわかりました。
追加のデータベースクエリなしでモジュール内の記事のキーワードを取得する方法はありますか?
おそらく、モジュールのロード方法をチェックするコードを追加します。私のコード:
$item = JFactory::getDocument();
if ($item->template) {
echo "standart module load - use getMetaData";
} else {
echo "module loaded by plugin - create an additional query";
}
もっと良いアイデアはありますか?
コンテンツの準備はヘッドデータの準備のかなり前に行われるため、この目的で標準のJoomla {loadposition}コンテンツプラグインを使用することはできません。
NoNumberのModule Anywhereプラグインのように、ヘッドデータの準備後にmosコードをモジュールに置き換える、独自のJoomlaシステムプラグインを作成する必要があります。詳細については、Joomlaプラグインイベントのリストを参照してください: https://docs.joomla.org/Plugin/Events
モジュールからSQLを使用して手動でキーワードを取得するのがおそらく最も簡単です。 (view = articleの場合)のようなもの:
$app=JFactory::getApplication();
$id = $app->input->getInt('id', 0);
$db=JFactory::getDbo();
$db->setQuery("select metakey from #__content where id={$id}");
$keywords=$db->loadResult();