如何显示来自不同 extension/plugin 的即显消息?

How do I show flash messages from a different extension/plugin?

Typo3 7.x 中,我需要在重定向到不同的扩展后显示一条闪现消息。不知何故,那里没有显示消息:

// in powermail_extended:

$this->addFlashMessage('Some message', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::NOTICE);

$uri = $this->uriBuilder->uriFor('form', [], 'Form', 'powermail', 'pi1');
$this->redirectToURI($uri);

是否仅在重定向后显示相同的前端插件时才显示 flash 消息?如果是这样,我怎样才能同时显示 "foreign" 闪现消息?

是的,根据前端插件的不同,闪现消息在不同的队列中。在重定向后的控制器中,添加以下行:

protected function emitBeforeCallActionMethodSignal(array $preparedArguments) {
    parent::emitBeforeCallActionMethodSignal($preparedArguments);
    $this->addMessagesToDefaultQueue('extbase.flashmessages.tx_powermailextended_pi1' /* depending on your frontend plugin name */);
}

protected function addMessagesToDefaultQueue($queueId) {
    $queue = $this->controllerContext->getFlashMessageQueue($queueId); 
    $msg = $queue->getAllMessagesAndFlush();
    if ($msg) {
        $defaultQueue = $this->controllerContext->getFlashMessageQueue();
        foreach ($msg as $m) {
            $defaultQueue->enqueue($m);
        }
    }
}

这将在重定向之前从插件中删除消息并将其添加到 "correct" 队列。

不向另一个插件显示消息的原因是queueIdentifier

当您重定向到另一个插件时,<f:flashMessages /> 会尝试找到您当前的 flashMessage 队列,它绝对是空的。

我找到了一种向另一个插件显示 flashMessage 的简单方法。

TYPO3 version 10.4x

例如。插件 powermail_extended controller/action

public function createAction(){
   $this->addFlashMessage('Some message', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::NOTICE);

   $uriBuilder = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder::class);
   $uri = $uriBuilder
          ->reset()
          ->setTargetPageUid($GLOBALS['TSEF']->page['uid'])
          ->uriFor('form', [], 'Form', 'powermail', 'pi1');
   $this->redirectToURI($uri);
}

另一个插件powermail,你需要在其中显示 flashMessage。

您只需更改视图中的代码即可,例如。插件 powermail ExtendedView/Resources/Private/Templates/Form/Form.html

<f:flashMessages /> // this will show your default current plugin flashMessage

<f:flashMessages queueIdentifier="extbase.flashmessages.tx_powermailextended_pi1" /> // This will show your flashMessage from another plugin eg. powermail_extended

您好!