Montag, 14. Juli 2014

Einsatz von form4_ajax in eigenen Extensions

TYPO3 Extension form4_ajax

Die Idee von form4_ajax

Damit Seiten möglichst flexibel sind, werden Inhalte mit stetig aktualisierten informationen oft erst bei einer Anfrage durch einen Webseiten-Besucher dynamisch erzeugt. Erfolgt dies innerhalb von TYPO3 durch eine ungecachte Extension oder ein ungecachtes Content-Element (USER_INT & COA_INT), so wird die Seite mit dem neuen Inhalt auch wiederum neu erzeugt und dann neu geladen.

Das Problem: in diesem Fall ist die Nutzung des Caches für diese Seite nicht mehr möglich, und es lässt sich keine statische Seite zur Performancesteigerung erzeugen. Schliesslich möchte man nur den Inhalt ändern und nicht jedes mal das gesamte Markup einer Seite neu erzeugen.

Der Aufruf via AJAX (engl. Abkürzung für: Asynchronous JavaScript and XML) bietet hier die notwenige Basis um nur die essentiellen Inhalte der Seite anzupassen. Hierzu wird ein Javascript in die Seite eingebettet, das die die Anfrage an den Server weiterleitet und die zurückgelieferten Daten wieder dynamisch durch Javascript in die Seite einbindet. Bei den zurückgelieferten Daten kann es sich um Variablen, JSON- oder XML-Objekte oder auch aus bereits fertig erzeugten Content handeln.

TYPO3 bietet den eiD-Mechanismus an um eigene AJAX Requests von Extensions entsprechend in die Seite einbinden zu können. Die Einbindung in die eigene Extension geht zwar recht flott, bedeutet aber für jede Extension in die ein solcher eID Aufruf einen Integrations-Aufwand mit fast identischen Code und mindestens einem neuen übertragenden Parameter je Extension mehr.

Der Lösungsansatz von form4_ajax

Um hier eine effizientere Lösung zu finden, waren die Ziele schnell definiert. Eine allgemeine Lösung für mehrere Extension sollte gefunden werden, die Parameter an eine beliebige Action eines beliebigen Extension-Controllers übergibt und auch Zugriff auf die Settings (sowohl Typoscript als auch Flexform) eines Plugins erlaubt.

form4_ajax löst dies, indem ein eigener eID Aufruf integriert wird, der die Anfrage annimmt und dann entsprechend der anderen übergebenen Parameter des Standard Fluid Link Helpers an den eigentlichen Controller übergibt. Dieser liefert dann die gewünschten Daten an den View zurück.

form4_ajax in der Praxis

Um eine Ajax-Anfrage an einen eigene Extension zu übergeben, wird nichts weiter benötigt als form4_Ajax über den Extensionmanager zu installieren und in der ExtConf ggf. einen eigenen Namen für den eId-Dispatcher zu definieren. Default wird "form4ajax" als eID-Key angenommen.

Im Fluid-Template wird dann entsprechend dieser Konfiguration ein Link zu einer eigenen Action wie erzeugt. Ein Beispiel:

<f:link.page additionalParams="{tx_extensionname_controllername: '{vendorName: /'YOURFENDORNAME/', action: /'youraction/', controller: /'YourController/'}', eID: 'form4ajax'}">Ajax Link</f:link.page>

Man beachte bitte die Nutzung der in der ExtConf definierten eID. Diese bei der Definition einer eigenen eID entsprechend anpassen.

Wird Zugriff auf die Settings einer Extension benötigt so sollte zudem die ContentId des Plugins zu den AdditionalParams hinzugefügt werden:

"pluginId: /'id'/"

comments powered by Disqus