web-dev-qa-db-ja.com

モジュールが{loadposition}に配置されている場合のJFactory :: getDocument()の問題

行き詰まった。私は単純なコーディング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";
}

もっと良いアイデアはありますか?

2
Beshur

コンテンツの準備はヘッドデータの準備のかなり前に行われるため、この目的で標準のJoomla {loadposition}コンテンツプラグインを使用することはできません。

NoNumberのModule Anywhereプラグインのように、ヘッドデータの準備後にmosコードをモジュールに置き換える、独自のJoomlaシステムプラグインを作成する必要があります。詳細については、Joomlaプラグインイベントのリストを参照してください: https://docs.joomla.org/Plugin/Events

1
Abhishek

モジュールから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(); 
0
jonasfh