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);

 

Autor:
Geändert: Dienstag, 11. Oktober 2016 11:49 Uhr
Erstellt: Freitag, 28. Februar 2014 14:15 Uhr
Tags: , , , , ,
Themengebiet: Web Entwicklung, TYPO3, TYPO3 Extension-Programmierung

Trackback: Trackback-URL LoadingZu Favoriten hinzufügen

3 Kommentare

  1. 1

    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.

  2. 2

    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.

  3. 3

    Ich habe nun den Artikel ergänzt, wie man FlashMessages in initializeAction verwenden kann.

Kommentar abgeben