Adventskalender 2008: Türchen 17
Tim Georg hat Euch gestern im Türchen 16 gezeigt, wie man mit TypoScript und einem cObj einen Login erzeugt. Mein heutiges Türchen ist sehr kurz, aber sehr interessant wie ich finde.
In letzter Zeit habe ich sehr oft mit AJAX und JSON gearbeitet. Leider gibt es dabei immer ein Problem mit cc_debug, weil sich dieser immer hinter die Ausgabe des JSON Codes klemmt und damit ein kaputtes JSON erzeugt. Nachdem ich heute mit meinem Kollegen Michael zusammen gesessen habe um dieses Problem zu lösen, sind wir auf eine sehr einfache Lösung gestoßen:
$GLOBALS['errorList']->clear();
Die Zeile 1 direkt vor der Ausgabe des JSON Codes eingebaut, verhindert, dass cc_debug noch seinen JavaScript-Code hinter her ausgibt. Und wer jetzt sagt: naje, ein die() oder exit() sollte es auch tun, der irrt sich. Versucht es gerne selber mal ;)



Dezember 17th, 2008 at 06:21
vielen Dank an der Stelle für deine Türchen, eins werd ich noch beisteuern, 16 war ja auch von mir ;)
lg
Dezember 17th, 2008 at 09:42
Sorry, hab Tim durch Georg ersetzt ;) Ich übersehe es jedes mal, denn der TYPO3Blogger ist für mich immer noch “nur” Tim. Hoffe ich bekomme das irgendwann mal auf die Reihe.
Dezember 18th, 2008 at 00:05
[...] hat Frank beschrieben wie man ALAX Konflikte zwischen valider Ausgabe und cc_debug verhindert. Heute geht es wieder um [...]
Januar 14th, 2009 at 15:12
Wobei ich ja dazu tendiere, die() nur zu verwenden, wenn ein Fehler aufgetreten ist. Für ein geplantes und “erfolgreiches” Beenden nehme ich lieber exit(). Dann macht es auch Sinn, dass uns PHP zwei Funktionen für diesen Zweck anbietet.
Aber das letztendlich ist das natürlich Geschmackssache (ist ja nirgendwo vorgeschrieben afaik).
Februar 23rd, 2009 at 16:07
Die oben beschrieben Variante schmeißt leider einen Fatal Error, falls cc_debug nicht installiert ist. Für TER-Extensions ist das als eher unpraktisch (es sei denn, man nimmt cc_debug mit in seine Dependencies auf)
Besser so:
if( method_exists($GLOBALS['errorList'], ‘clear’)) {
//Clear the cc_debug buffer
$GLOBALS['errorList']->clear();
}else {
//Clear the default debug buffer
ob_clean();
}
Nachteil ist dabei natürlich, dass man selber auch kein output buffering in seiner Extension mehr verwenden kann. Und wenn jemand anderes vorher in seiner Extension sowas macht wie debug($foo); ob_flush(); schützt einen das leider auch nicht vor Debug-Ausgaben. Da müssen die Entwickler vom Core und von cc_debug wohl noch mal nacharbeiten. Na ja, mal sehen, wie es bei TYPO3.5 aussieht, wenn’s denn kommt ;-)
Februar 23rd, 2009 at 16:27
Oder Du legst einfach eine if abfrage rum:
if (t3lib_extMgm::isLoaded(‘cc_debug’)) {
$GLOBALS['errorList']->clear();
}