如何显示来自不同 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
您好!
在 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
您好!