TYPO3: FlashMessages
FlashMessages in Extbase
FlashMessages erstellen
Anlegen einer FlashMessage im Controller:
$this->addFlashMessage( 'The message text.', 'The title', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK ); |
oder
$this->controllerContext->getFlashMessageQueue()->enqueue( $this->objectManager->get( \TYPO3\CMS\Core\Messaging\FlashMessage::class, 'The message text.', 'The title', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK ) ); |
Die zweite Funktion macht das gleiche wie die erste, die erste Funktion ist lediglich eine vereinfachte Variante der zweiten Funktion.
FlashMessages anzeigen
Auslesen von Meldungen im Controller:
$this->controllerContext->getFlashMessageQueue()->getAllMessages() |
oder
$this->controllerContext->getFlashMessageQueue()->getAllMessagesAndFlush() |
Ausgeben von Meldungen im Fluid Template:
<f:flashMessages renderMode="div" /> |
Anpassen der CSS Klassen
Kann sinnvoll, wenn man beispielsweise Bootstrap als Framework nutzt.
Geht vermutlich nur per XCLASS von \TYPO3\CMS\Core\Messaging\FlashMessage, damit wirklich ALLE Meldungen die eigenen CSS Klassen enthalten. Für die Änderung der CSS Klassen von Meldungen, die von einer eigenen Erweiterung erzeugt werden, gibt es folgende Möglichkeit:
EXT:my_ext/Classes/Messaging/FlashMessage.php
namespace TYPO3\MyExt\Messaging; class FlashMessage extends \TYPO3\CMS\Core\Messaging\FlashMessage { protected $classes = array( self::NOTICE => 'notice alert alert-info', self::INFO => 'info alert alert-info', self::OK => 'ok alert alert-success', self::WARNING => 'warning alert alert-warning', self::ERROR => 'error alert alert-danger' ); } |
Entsprechend ändert sich dann natürlich der Aufruf:
View
$this->controllerContext->getFlashMessageQueue()->enqueue( $this->objectManager->get( \Vendor\MyExt\Messaging\FlashMessage::class, 'The message text.', 'The title', \TYPO3\MyExt\Messaging\FlashMessage::OK ) ); |
FlashMessages in initializeAction()
Ist nicht möglich, da $this->contextController noch nicht bereitsteht.
Alternative: Funktion emitBeforeCallActionMethodSignal() nutzen, diese Funktion wird ebenfalls vor der Action aufgerufen:
/** * Called before all actions * * @param array $preparedArguments */ protected function emitBeforeCallActionMethodSignal(array $preparedArguments) { parent::emitBeforeCallActionMethodSignal($preparedArguments); $action = $this->request->getControllerActionName(); if(in_array($action, array('list', 'new'))) { $this->addFlashMessage('Text', 'Title', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK); } } |
FlashMessages im Backend (TYPO3 ab Version 6.1)
Nutzbar z.B. in einem Hook, der beim Speichern eines Datensatzes greift.
/** @var $flashMessage FlashMessage */ $flashMessage = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance( 'TYPO3\\CMS\\Core\\Messaging\\FlashMessage', htmlspecialchars($message), htmlspecialchars($title), \TYPO3\CMS\Core\Messaging\FlashMessage::ERROR, true // store in session ); /** @var $flashMessageService \TYPO3\CMS\Core\Messaging\FlashMessageService */ $flashMessageService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Messaging\\FlashMessageService'); $defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier(); $defaultFlashMessageQueue->enqueue($flashMessage); |
Dienstag, 6. Oktober 2015 0:21
Der letzte Abschnitt funktioniert ab TYPO3 7.0 nicht mehr, siehe:
https://wiki.typo3.org/TYPO3_CMS_7.0#Breaking:_.2357382_-_Remove_old_flash_message_API
Ich hatte die FlashMessages auf diese Weise „missbraucht“ um im Frontend aus der initializeAction in bestimmten Fällen eine Message auszugeben. Habe keine „neue“ Möglichkeit dafür gefunden leider.
Dienstag, 6. Oktober 2015 0:24
Ah und für den zweitletzten Abschnitt: TYPO3 nutzt nun standardmässig die Bootstrap Klassen für die FlashMessages. Man kann die render-Funktion von \TYPO3\CMS\Core\Messaging\FlashMessage überschreiben wenn man das HTML anpassen will.
Mittwoch, 31. August 2016 12:01
Ich habe nun den Artikel ergänzt, wie man FlashMessages in initializeAction verwenden kann.
Mittwoch, 18. Juli 2018 12:23
Danke für die Infos. Weist du auch was man für FlashMessages in den initialize[Meineaction]Actions verwenden kann?