Zum Inhalt springen

Caching bei USER_INT?

Erstellt am 16. August 2009 · Noch keine Antworten

Tags: Frage

Shakademus ·

Hallo,

ich grüble seit Tagen über ein Phänomen, das mir in der Arbeit bei einer extern programmierten Typo3-Seite untergekommen ist.
Ich muss zunächst mal erwähnen, dass sich meine Typo3-Erfahrung sehr in Grenzen hält.

Und zwar verwendet die Seite die Extension dmmjobcontrol. Diese wurde allerdings vom Entwickler umgeschrieben. Konkret wurden alternative Listings und Detailansichten hinzugefügt.

Bei diesen Detailansichten hat sich nun folgendes Problem ergeben:
Sobald man die Detailansicht mit einer ungültigen Job-ID oder auch gar keiner aufgerufen und eine "not found"-Meldung kassiert hat, erscheint diese Meldung bei allen Detailaufrufen, also auch bei jenen, wo vorher korrekt Jobdetails angezeigt wurden. Sie wird also irgendwie gecacht.

Steigt man in den Code ein, findet sich auch schnell die Ursache: Der Schreiberling hat schlichtweg das globale set_no_cache auskommentiert.

Vgl.: http://typo3.org/extensions/repository/view/dmmjobcontrol/current/info/pi1%252Fclass.tx_dmmjobcontrol_pi1.php/

Die erste Frage, die mir bei der Codestelle kommt, ist: Warum verwendet die Extension ab Werk sowohl pi_USER_INT_obj, als auch set_no_cache? Meinem Verständnis nach müsste Sie set_no_cache verwenden, da sie als USER_INT keine indizierte Suche anbieten könnte. Warum aber zusätzlich USER_INT?

Die zweite Frage ergibt sich aus der Änderung. Da wir die Suchfunktion nicht verwenden, kann ich es durchaus nachvollziehen, dass set_no_cache auskommentiert und pi_USER_INT_obj stehen gelassen wurde. Warum läuft die Ausgabe aber trotzdem in den Cache? Und v. a. warum genau dann, wenn kein gültiger Code übergeben wurde? Solange ich nur gültige Codes übergebe, bekomme ich stets die richtige Ausgabe. Es wird übrigens weder im Original noch in der Modifikation mit cHashes gearbeitet (da ja theoretisch sowieso nicht gecacht wird).

Leider kann ich zu der Modifikation keinen Code rausgeben, aber die Änderungen halten sich in Grenzen. Was die alternative Detailansicht angeht, wurde einfach ein weiterer Code in den switch-Block der main-Funktion eingefügt und dort eine kopierte und leicht geänderte Version der Funktion displayDetail aufgerufen. Es geht mir bei meiner zweiten Frage aber auch weniger um "Wo ist der Fehler?", sondern viel mehr "Wie ist es möglich, dass ein USER_INT-Objekt gecacht wird?". Und nein, pi_USER_INT_obj = false; kommt nicht vor 😉

Bin für jeden Hinweis dankbar. Das beschäftigt mich wie gesagt schon seit Tagen.