S7
zurückArbeiten mit TYPO3 FlashMessages im FrontEnd
15.05.2019
Thema: TYPO3

FlashMessages in TYPO3 Frontend konfigurieren und nutzen

Arbeiten mit TYPO3 FlashMessages im FrontEnd

Aktuell habe ich ein System, welches das Arbeiten mit Feedback erfordert. Hier werden viele Datensätze für Veranstaltungen über das Frontend durch Webseitenbenutzer angelegt, editiert, aktiviert. Der Benutzer soll für jede getätigte Aktion auch eine korrekte Antwort erhalten.

Um die Dynamik zu erhalten, habe ich eine Lösung gesucht, die für mehrere Extensions funktioniert und die Meldungen, egal, auf welcher Seite der Benutzer landet, definitiv ausgegeben werden.

Die Lösung hier sind die TYPO3-internen FlashMessages. Das System, welches aus dem Backend mit Feedback ja bereits bekannt ist, lässt sich auch ohne Probleme im Frontend nutzen.

Der Extbase AbstractController enthält schon eine Methode addFlashMessage(). Das ist schon gut, hat aber den Nachteil, dass man die Ausgabequeue nicht bestimmen kann. Dies ist aber für eine globale Ausgabe im Webseiten-Template zwingend notwendig.

Also baue ich meine FlashMessage selbst. Hier kann ich Meldungen, Titel, Typ und die Pipe (hier intern Queue) selbst steuern.

Das ganze sieht dann so aus:

$message = GeneralUtility::makeInstance(
    FlashMessage::class,
    $body,
    $title,
    $type,
    true
);
$flashMessageService = $this->objectManager->get(FlashMessageService::class);
$messageQueue = $flashMessageService->getMessageQueueByIdentifier($identifier);
$messageQueue->clear();
$messageQueue->addMessage($message);

Dabei sind:

$body = 'Body der Message';
$title = 'Titel der Message';
$type = 'Typ der FlashMessage'; //dabei kann jeder Typ von \TYPO3\CMS\Core\Messaging\AbstractMessage verwendet werden.

$identifier ist für uns das wichtigste, denn hier wird die Warteschlange angegeben, in die die FlashMessage eingereiht wird.

Dieser $identifier sollte im Projekt global verwendet werden, sodass ich eine einheitliche Ausgabe aller benötigten Messages bekomme.

Aber wie bekomme ich die Ausgabe jetzt? Und dann auch noch global?

Hier habe ich den passenden ViewHelper gefunden:

<f:flashMessages>

Dieser ViewHelper greift alle einkommenden FlashMessages ab und gibt sie aus. Folgendermaßen kann das dann in einem separaten Parital aussehen:

<html
        xmlns:f="http://typo3.org/ns/TYPO3/Fluid/ViewHelpers"
        xmlns="http://www.w3.org/1999/xhtml"
        lang="en"
        f:schemaLocation="https://fluidtypo3.org/schemas/fluid-master.xsd"
        data-namespace-typo3-fluid="true"
>
<f:flashMessages as="{flashMessages}" queueIdentifier="myIdentifier">
    <f:for each="{flashMessages}" as="flashMessage">
        <div class="flash-message">
            <p>
                <a href="#" class="icon-cancel">close window</a>
            </p>
            <h3 class="icon-ok">{flashMessage.title}</h3>
            <p>{flashMessage.message}</p>
        </div>

    </f:for>
</f:flashMessages>
</html>

Das Auslagern in ein separates Partial ist hierbei notwendig, da es sonst zu Cache-Problemen führen kann. Aus Gründen, die sich mir nicht erschlossen haben, kann es passieren, dass eine Zeit lang gar keine FlashMessages ausgegeben werden, dann auf einmal alle in der Queue.

Um diesen Effekt zu verhindern, habe ich, wie oben schon beschrieben, das Rendering der FlashMessages in ein separates Partial ausgelagert.

Im Template (und wirklich da, nicht im Layout), brauche ich jetzt eine fixe Stelle, an der ich die Messages ausgebe. Und dies realisiere ich mit den vhs-ViewHelpers, genau genommen mit

<v:render.uncache>

Link zur v:render.uncache Dokumentation

Ich inkludiere also im Template der Website in einem überall sichtbaren Bereich, an dem ich die Messages haben will, einfach folgende Zeile:

<v:render.uncache partial="FlashMessages/Message" arguments="{_all}"/>

Voraussetzung hierfür ist, dass mein Partial unter FlashMessages/Message.html zu finden ist.

Das Resultat ist, dass jede Extension, die im bestehenden TYPO3 inkludiert ist, an diese Queue eine Message schicken kann. Ich bekomme außerdem den Typ der FlashMessage mit, sodass ich bei Bedarf auf die unterschiedlichen Stati (OK, Error, Warning, Notice, Info) entsprechende Klassen definieren kann und die Ausgabe hier auch anpassen kann.

Im aktuellen Projekt senden mittlerweile 20 Controller FlashMessages passend zu verschiedenen Aktionen oder Fehlern wie Speichern, Löschen, Aktivieren, Deaktivieren, Datensatz nicht gefunden, Benötigter Datensatz fehlt.

Hierbei wird auch das Exception-Handling aus TYPO3 verwendet und entsprechend genutzt, dazu mache ich aber noch einen separaten Blogbeitrag, welchen du hier findest.

Ähnliche Beiträge
"Bauern helfen Bauern" in Bosnien
30.11.2019

Srebrenica - Nie überwundenes Trauma - Teil 3

Wie eine österreichische Hilfsorganisation in Bosnien Menschen hilft

Wie die Menschen vor Ort versuchen über die Runden zu kommen.  

30.10.2019

Die Bezahlschnittstelle von Wirecard

Dies ist ein Tutorial zur Integration von Kreditkartenzahlung auf einer Website mithilfe der Bezahlschnittstelle von Wirecard.  

EuGH-Urteil zu Cookies
18.10.2019

Das EuGH-Urteil zum setzen von Cookies

Was heißt das jetzt für meine Website?

Die Folgen des Urteils des Europäischen Gerichtshofs  

Barrierefreiheit auf Websites
18.09.2019

Barrierefreiheit auf Websites

Wie wird eine Seite für alle zugänglich?

Optimierung für alle User  

01.08.2019

Eröffnungsveranstaltung fumes and perfumes

Die ganzjährige Fotoausstellung im Parkhaus Züblin ist eröffnet!

Fumes and perfumes geht ins 6. Jahr!  

"Bauern helfen Bauern" in Bosnien
22.07.2019

Srebrenica - Nie überwundenes Trauma - Teil 2

Auf dem Weg nach Bosnien-Herzegowina

Wie ein Konflikt mitten in Europa eingefroren wurde.  

"Bauern helfen Bauern" in Bosnien
13.06.2019

Srebrenica - Nie überwundenes Trauma

Wie eine österreichische Hilfsorganisation in Bosnien Menschen hilft

Die Probleme in Bosnien sind schon lange nicht mehr auf der Tagesordnung europäischer Medien und Politiker.  

03.06.2019

Typo3 9.5, Extbase Models generiert im Frontend und sprechende URLs

Da ist sie, die schöne neue sprechende URL-Welt in TYPO3 9.5. Einfach ein Feld vom Typ 'slug' konfigurieren, und der Datensatz hat eine schöne, sprechende, SEO sichere URL. Außer, naja, außer der Datensatz wurde im Frontend, oder via Cron oder sonst irgendwie in der Extbase Welt generiert. Was tun?  

Exception Handling in TYPO3
28.05.2019

Exceptions in TYPO3, wie gehe ich damit um?

Exception Handling in TYPO3

Jeder kennt diese Meldungen, welche sagen, irgendetwas ist da wohl schief gelaufen. Das ist nervig, sollte programmatisch vermieden werden, kann aber nicht immer verhindert werden. Oder doch?  

Waldakademie Schramberg
27.03.2019

Waldakademie Schramberg mit neuem Programmheft

Erweiterung des Freizeitangebotes

Der langjährige Kunde unseres Partners B-FACTOR, das Familienerholungswerk der Diözese Rottenburg-Stuttgart, hat sein vielfältiges Ferien- und Freizeitangebot erweitert und am 15. März 2019 die Waldakademie Schramberg als neuen, wichtigen Bestandteil des Feriendorfs Schramberg feierlich eröffnet.  

Uploadfilter und Leistungsschutzrecht
26.03.2019

Uploadfilter und Leistungsschutzrecht

Worum geht es?

Jetzt ist sie durch: Die EU-Richtlinie zum "Urheberrecht im digitalen Binnenmarkt" ist vom Europäischen Parlament abgesegnet worden. 348 Abgeordnete waren dafür, 274 waren dagegen, 36 enthielten sich. Der Riss ging dabei durch alle Fraktionen. Besonders umstritten sind die Artikel 15 (früher 11) und 17 (früher 13).  

Globales Menü aus Datensätzen generiert
08.03.2019

Globales Menü aus Datensätzen generiert

Für eine Produktübersicht ergab sich die Notwendigkeit, ein immer vorhandenes Menü für die Webseite zu generieren.

Der erste Gedanke war, hier ein Plugin zu bauen, welches die Datensätze holt, aufbereitet und ausliefert, damit im Fluid Template das Menü generiert werden kann. Folgende Szenarien wären damit möglich gewesen:  

TYPO3 Extensions aktualisieren
26.02.2019

Hilfe, meine TYPO3 Extension ist zu alt!

Wie hält man seine TYPO3 Erweiterungen auf dem neuesten Stand?

Jeder der TYPO3 Extensions schreibt und diese über die Jahre pflegt, kommt irgendwann mal an die Stelle, wo die Extension zu alt ist für die glänzend neue TYPO3 Version.  

Uploadfilter
22.02.2019

Uploadfilter

Worum geht es?

Nach monatelangem Tauziehen steht fest: Die Europäische Union verpflichtet künftig Webseiten und Apps zum Filtern von Inhalten. Die Freiheit im Internet schwindet damit, fürchten Netzaktivisten. Am Text der Reform ist nicht mehr zu rütteln, die endgültige Abstimmung kommt in wenigen Wochen.  

Allgemeines Gleichbehandlungsgesetz
12.02.2019

Allgemeines Gleichbehandlungsgesetz

Auswirkungen des dritten Geschlechts „divers“ auf Arbeitgeber und Personalabteilungen in der Praxis

Seit Mitte Dezember ist in Deutschland ein Gesetz in Kraft, das offiziell ein drittes Geschlecht neben Mann und Frau bestätigt. Nach dem Gesetzentwurf wird dieses mit der Bezeichnung „divers“ betitelt. Welche Auswirkungen hat diese Anerkennung des dritten Geschlechts auf Arbeitgeber sowie Personalabteilungen im Besonderen?  

World Usability Day
12.11.2018

World Usability Day 2018

Der Wert von Usability bei der User Experience

Alljährlich findet in vielen Städten der Welt der World Usability Day statt. Es gibt jede Menge Seminare, Workshops und Konferenzen, die sich umfassend mit Themen und Fragen rund um Usability und User Experience auf verschiedenen Gebieten befassen. Unsere Mitarbeiter waren in Stuttgart und Wien auf Veranstaltungen.  

ePrivacy-Verordnung
05.11.2018

Die ePrivacy-Verordnung

Worum geht es?

Nach der Europäischen Datenschutzgrundverordnung (EU-DSGVO) droht nun der nächste Schlag. Die Diskussionen um die ePrivacy-Verordnung tragen zur bereits ohnehin bestehenden Verwirrung bei. Aber worum geht da eigentlich? Und ist das überhaupt neu?  

TYPO3-Baukastensystem
02.11.2018

Unser TYPO3-Baukastensystem

Ein hochleistungsfähiges Multi-Mandantensystem

Viele flächendeckend verteilte Unternehmen und Organisationen haben die Idee und den Anspruch ihren Unternehmenseinheiten ein standardisiertes Tool in einheitlichem Look & Feel zur Verfügung zu stellen, welche innerhalb eines vorgegebenen Rahmens eine größtmögliche Flexibilität an Contentproduktions- bzw. Darstellungsmöglichkeiten haben.  

Strichzeichnungen und Illustrationen
26.10.2018

Punkt, Punkt, Komma – Strich: Sudhaus7 und die Strichzeichnung

Illustrationen als weitere Brauzutat für den Meistertrunk

Illustrationen sind das sprichwörtliche Salz in der Suppe. Im Kontrast zur Fotografie verbreiten sie eine Aura des klassischen.  

Editieren von Datensätzen
16.10.2018

Editieren von Datensätzen im Backend-Modul

Erstellung eines Links zur Editieransicht im ViewHelper oder Controller

Die TYPO3-Dokumentation zum Setzen eines Links zur Editieransicht eines Datensatzes in TYPO3 8 und 9 ist im Moment noch veraltet. Ich zeige, wie dies in Backend-Modulen, die die genannten TYPO3-Versionen als Abhängigkeit haben, tatsächlich umgesetzt werden muss.  

Kommentare