Zum Inhalt springen

Ausgabe des Templates verhindern

Erstellt am 12. Dezember 2006 · 5 Antworten · letzte Antwort am 13. Dezember 2006

Tags: JavaScript & AJAX, Frage

copernic ·

Hallo Zusammen,

ich möchte gern im Extension Code verhindern, dass das äußere Rahmentemplate, der Html-Header usw. ausgegeben wird. Dies möchte ich im Extension-Code (Plugin, extends tslib_pibase) verhindern. Folgendes habe ich schon probiert:

unset($GLOBALS['TSFE'])

Dann erfolgt keine Ausgabe mehr, aber es wird noch <br /> <b>Fatal error</b>: Call to a member function getHash() on a non-object in <b>/Applications/MAMP/htdocs/typo3/sysext/cms/tslib/class.tslib_content.php</b> ausgegeben.

Kurz zum Hintergrund: Ich arbeite mit Dojo und möchte nach dem Seitenaufruf nur das json-Objekt abgreifen. Der erste Aufruf soll noch die Seite generieren, die anderen Aufrufe nur noch das json-Objekt liefern.

Kann ich die Ausgabe von anderen Daten in meiner Klasse unterdrücken?

Danke + viele Grüße

Copernic

steffenk ·

dazu musst Du im TS einen neuen Pagetypen erzeugen mit eigener Typenummer, dort header ausschalten und als ausgabe lediglich Deine Extension.

copernic ·

Hallo stefenk,

danke für Deine Antwort. Ich möchte das Ganze gern direkt im php-Code der Extension machen, also nicht in TypoScript. Inzwischen steige ich einfach in der Methode mit exit aus, so dass nur der relevante Teil per Ajax übertragen wird und nicht die gesamte Seite. So wirklich elegant finde ich das aber nicht und würde viel lieber in PHP direkt dazu anweisen, dass nicht die ganze Seite aufgebaut werden soll, also irgendwo in den Klassen darüber mit echo ausgegeben wird.

Da ich den Zugriff auf die Typo3-Objekte brauche, möchte ich mir die Ajax-Ausgaben auch nicht über eine eigene Klasse rausziehen, sondern schon in einer Klasse bleiben die von tslib_pibase vererbt wird.

Viele Grüße

Copernic

jenses ·

In $GLOBALS['TSFE']->tmpl->setup[] hast du Zugriff auf das gesamte TS-Setup-Array,
du kannst hier also nach Lust und Laune auch das page-Objekt modifizieren.
Das funktioniert natürlich nur, wenn du den Content auch zurückgibts 😉

steffenk ·

unter Ajax definierst Du doch eine Funktion (Deiner Extension), die Dir den von Dir erzeugten Content zurückliefert. Darin sind die anderen Objekte von der Ausgabe ausgeschlossen.
(mit Xajax funktioniert das jedenfalls so)

copernic ·

Hallo Zusammen,

wenn ich die Methode in meiner Klasse (die tslib_pibase vererbt) per AJAX abgreife, klappt das auch. Leider wird auch der ganze Rest mitgeliefert (von Typo3 generiertes Template). Es scheint, als ob die Methode aus meiner Klasse ausgeführt wird und dann in der tslib_pibase per echo weitere Sachen automatisch rausgeschossen werden. Das gibt natürlich Syntaxfehler beim Parsen auf dem Client in JavaScript.

Alternative: Ich lagere alles in eine eigene Klasse aus, die nicht von tslib_pibase vererbt. Damit habe ich dann nicht diese unkontrollierte Ausgabe, sondern bekomme nur mein return-Wert aus der Methode zurück. Nachteil: ich habe keinen Zugriff auf die ganzen Methoden in tslib_pibase, d. h. auf die Übersetzungen, Template-Methoden, FE-User-Daten. Diese Sachen benötige ich aber und möchte ungern alles zu Fuß in dieser Klasse implementieren.

Ich setze übrigens DOJO ein und kommuniziere über JSON. Hat einer eine Idee, wie ich es hinbekomme, dass in einer Methode die in einer Klasse steht, die von tslib_pibase vererbt wirklich nur per http abschickt, was ich brauche. Außerdem zerstört diese 30-Sekunden-bis-zum-Seitenaufbau-Meldung auch gelegentlich die Kommunikation über AJAX.

Wie habt ihr das gelöst? Kann mir jemand Code-Beispiele geben?

Danke und viele Grüße

Copernic