Extbase - Flash Message: Unterschied zwischen den Versionen
| Zeile 7: | Zeile 7: | ||
== Übersicht == | == Übersicht == | ||
Werden meist im Controller eingesetzt. | Werden meist im Controller eingesetzt. | ||
| + | |||
| + | === FlashMessages im Controller auslesen === | ||
| + | <syntaxhighlight lang="php"> | ||
| + | $this->controllerContext->getFlashMessageQueue()->getAllMessages() | ||
| + | //oder | ||
| + | $this->controllerContext->getFlashMessageQueue()->getAllMessagesAndFlush() | ||
| + | </syntaxhighlight> | ||
| + | Ausgeben von Meldungen im Fluid Template: | ||
| + | |||
| + | HTML | ||
| + | <f:flashMessages renderMode="div" /> | ||
| + | ===Anpassen der CSS Klassen=== | ||
| + | Kann sinnvoll, wenn man beispielsweise Bootstrap als Framework nutzt. | ||
| + | |||
| + | In einer '''eigenen Erweiterung''' erzeugt werden, gibt es folgende Möglichkeit: | ||
| + | |||
| + | |||
| + | EXT:my_ext/Classes/Messaging/FlashMessage.php | ||
| + | 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 | ||
| + | PHP | ||
| + | $this->controllerContext->getFlashMessageQueue()->enqueue( | ||
| + | $this->objectManager->get( | ||
| + | 'TYPO3\\MyExt\\Messaging\\FlashMessage', | ||
| + | 'The message text.', | ||
| + | 'The title', | ||
| + | \TYPO3\MyExt\Messaging\FlashMessage::OK | ||
| + | ) | ||
| + | ); | ||
| + | |||
| + | Komplett für TYPO3 vermutlich nur per XCLASS von \TYPO3\CMS\Core\Messaging\FlashMessage, damit wirklich '''alle Meldungen''' die eigenen CSS Klassen enthalten. | ||
| + | |||
| + | === FlashMessages im Backend === | ||
| + | TYPO3 ab Version 6.1. Nutzbar z.B. in einem Hook, der beim Speichern eines Datensatzes greift. | ||
| + | |||
| + | <syntaxhighlight lang="php"> | ||
| + | /** @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); | ||
| + | </syntaxhighlight> | ||
== Beispiele == | == Beispiele == | ||
Version vom 27. Juni 2015, 07:40 Uhr
Flash Messages sind Systemnachrichten die man sowohl im Backend als auch im Frontend ausgeben kann.
Siehe auch: Klassen ändern, FlashMessages im Backend, http://blog.sbtheke.de/web-development/typo3/typo3-extension-programmierung/extbase-flashmessages
Übersicht
Werden meist im Controller eingesetzt.
FlashMessages im Controller auslesen
$this->controllerContext->getFlashMessageQueue()->getAllMessages()
//oder
$this->controllerContext->getFlashMessageQueue()->getAllMessagesAndFlush()
Ausgeben von Meldungen im Fluid Template:
HTML <f:flashMessages renderMode="div" />
Anpassen der CSS Klassen
Kann sinnvoll, wenn man beispielsweise Bootstrap als Framework nutzt.
In einer eigenen Erweiterung erzeugt werden, gibt es folgende Möglichkeit:
EXT:my_ext/Classes/Messaging/FlashMessage.php
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 PHP $this->controllerContext->getFlashMessageQueue()->enqueue(
$this->objectManager->get( 'TYPO3\\MyExt\\Messaging\\FlashMessage', 'The message text.', 'The title', \TYPO3\MyExt\Messaging\FlashMessage::OK )
);
Komplett für TYPO3 vermutlich nur per XCLASS von \TYPO3\CMS\Core\Messaging\FlashMessage, damit wirklich alle Meldungen die eigenen CSS Klassen enthalten.
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);
Beispiele
Einfache Beispiele
$this->addFlashMessage(
'The message text.',
'The title',
\TYPO3\CMS\Core\Messaging\AbstractMessage::OK
);
oder
//after class definition
use TYPO3\CMS\Core\Messaging\AbstractMessage;
...
$this->addFlashMessage(
'The message text.',
'The title',
AbstractMessage::OK
);
oder ganz Ausführlich
$this->controllerContext->getFlashMessageQueue()->enqueue(
$this->objectManager->get(
'TYPO3\\CMS\\Core\\Messaging\\FlashMessage',
'The message text.',
'The title',
\TYPO3\CMS\Core\Messaging\AbstractMessage::OK
)
);
Kurzübersicht aus t3-developer.com
Hinweis: Namespace schreibweise verwenden
//so \TYPO3\CMS\Core\Messaging\AbstractMessage:: ... // NICHT wie unten t3lib_Flashmessage::
http://t3-developer.com/extbase-fluid/cheats-extbase/controller/flash-messages/ (2015-06)
Flash Message Container in Extbase und Fluid
Insgesamt stehen 5 verschiedene Message Klassen zur Verfügung die mit folgendem Code angesprochen werden:
t3lib_Flashmessage::NOTICE t3lib_Flashmessage::INFO t3lib_Flashmessage::OK t3lib_Flashmessage::WARNING t3lib_Flashmessage::ERROR
Nutzt man FlashMessages im Backend, rendert Typo3 direkt die bekannten Kästen (siehe Abbildung). Im Frontend kann man die Klassen im eigenem Stylesheet ansprechen.
Optional kann inzwischen auch ein Titel für jede Nachricht vergeben werden. Im Controller sieht das ganze dann so aus:
//löscht die Standard Nachrichten aus der Messagequeue
$this->flashMessages->flush();
// eigene Message setzten, "NOTICE" setzt hier den grauen Ausgabekasten im BE
$this->flashMessageContainer->add('Message Text','Titel optional', t3lib_Flashmessage::NOTICE);
$this->view->assign ...
Im View werden die FlashMessages dann durch
<f:flashMessages />
aufgerufen. Dieser erzeugt standardmäßig eine unsortierte Liste mit <ul><li>
Mit dem Aufruf
<f:flashMessages renderMode="div" />
werden die Messages (sofern mehrere in der Queue sind) mit divs gerendert.
Und im Frontend?
Wenn man die Message um die "t3lib_Flashmessage::NOTICE" ergänzt, erhalten die div's der Message eine entsprechende Klasse, zum Beispiel:
<div class="typo3-messages">
<div class="typo3-message message-notice">
<div class="message-header">Titel optional Text</div>
<div class="message-body">Message Text</div>
</div>
</div>
Anhand der div Class kann so ein individuelles Styling in Abhängigkeit der gewälten t3lib_Flashmessage erstellt werden.