テンプレートではなくコンポーネント内にシステムメッセージを表示する


8

デフォルトでは、Joomla 3システムメッセージ(メッセージ、通知、警告)は、テンプレートの特定の位置に表示されます。

<jdoc:include type="message" />

これらのメッセージをより詳細に制御して、自分のコンポーネントのコンテナー内の異なる位置に表示することは可能でしょうか?

上記のjdocをコンポーネントのビュー(格安ショット)内で使用しようとしましたが、うまくいきませんでした。Joomlaの標準システムメッセージングシステムを使用してコンポーネントによって生成されたメッセージを「キャプチャ」し、どこにでも表示できる方法はありますか?

前もって感謝します。

回答:


9

わかりました、もう少し掘り下げたようです。自分の質問に対する答えを見つけました。基本的に私はこのプラグインを見つけました:

http://extensions.joomla.org/extensions/style-a-design/popups-a-iframes/25240

それは私が必要とするものではありませんが、そのコードをチェックして、次のように要約できる方法を見つけました(誰かが同じ質問を探してここに来た場合):

  1. <jdoc:include type="message" />メッセージを2回表示しないようにするには、テンプレートを使用してデフォルトで表示されるJoomlaメッセージを適切に処理する必要があります。
  2. これを処理する唯一の方法は、onBeforeRenderイベントでトリガーされるプラグインを使用することです
  3. その場合、次のことを行う必要があります。
    • を使用してメッセージを取得する $app = JFactory::getApplication(); $messageQueue = $app->getMessageQueue();
    • 必要に応じてメッセージを処理し、コンポーネントに出力します
    • メッセージキューをクリアして、メッセージが2回表示されないようにします。以前のJoomlaバージョンでは、メソッドを使用してキューを直接クリアすることができましたが、Joomla 3では、既存のキューを空のキューに置き換える必要があります
  4. これで、コンポーネントで使用可能なデフォルトのJoomlaメッセージングシステムにメッセージがキューイングされました。

これにはいくつかの作業が必要ですが、私がたどる全体的な道筋は明確だと思います。同様の状況で他の誰かに役立つことを願っています。


0

Isidroからのこの(良い)回答を完了するには、今日(Joomla 3.8.12)以降、メッセージキューを消去/クリアするパラメーターとしてgetMessageQueue()「true」(getMessageQueue(true))を指定して関数を呼び出すことができることに注意してください。

最後に、レイアウトがメッセージを表示するために予想される方法でメッセージを保存するには、次のコードを呼び出します(から抽出MessageRenderer::getData())。

// Initialise variables.
$lists = array();
// Get the message queue
$messages = \JFactory::getApplication()->getMessageQueue();
// Build the sorted message list
if (is_array($messages) && !empty($messages))
{
    foreach ($messages as $msg)
    {
        if (isset($msg['type']) && isset($msg['message']))
        {
            $lists[$msg['type']][] = $msg['message'];
        }
    }
}

次に$lists、正しい方法で並べ替えます。


ただfyiの場合、次のマイナーな微調整でスニペットを合理化できます:3v4l.org/DZGWd
mickmackusa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.