Zum Inhalt springen

TS Variable wird nur einmal nach gelöschtem Cache ausgegeben

Erstellt am 17. Dezember 2012 · 5 Antworten · letzte Antwort am 8. Januar 2013

Tags: PHP, Cache & Performance, Frage

leof ·

Hallo zusammen,
ich habe im TS-Setup eine Variable definiert:

mitarbeiter = 24

Diese möchte ich nun in einer eingebundenen php-Datei verwenden:

$mitarbeiter=$GLOBALS['TSFE']->tmpl->setup['mitarbeiterAllPid'];

Leider wird der Wert nur einmal übergeben, wenn im TS der Cache gelöscht wurde. Beim zweiten Aufruf ist die die php-Variable leer.
Ein config.no_cache = 1 "löst" das Problem - jedoch möchte ich den Cache nicht dauerhaft ausschalten. Deshalb suche ich eine Lösung auf die Variable zuzugreifen.

Könnt ihr mir weiter helfen?

Liebe Grüße,
Leo

Julian.​Hofmann ·

Hallo Leo.

Ist Dein PHP-Code nicht Teil einer Extension? Dann wäre ein

plugin.tx_extension_pi.mitarbeiter = 24
// bzw.
plugin.tx_extension_pi.mitarbeiterAllPid = 24

automatisch im $conf-Array, das beim Aufruf an Deine main-Methode übergeben wird.

Viele Grüße
Julian

leof ·

Hallo Julian,
nein - ist keine Extension. Die php-Datei wird im TS eingebunden - ich glaube mit PHP_SCRIPT_EXT
Bin mir aber gerade nicht 100%ig sicher und kann grad nicht nachschauen.
Komisch finde ich einfach, dass es beim 1. Aufruf nach dem Cachelöschen klappt und danach nicht mehr...
Lieben Gruß,
Leo

Julian.​Hofmann ·

Hm...o.O

Das Caching (incl. TS-Caching) könnte da irgendwie reinlangen, gerade weil PHP_SCRIPT nicht so die eleganteste Lösung ist (IMHO ist das in der 6.0 auch rausgeflogen).

Hab mal bisschen nachgelesen: auch das PHP_SCRIPT_*-Objekt kann eine Konfiguration haben. D.h. Dein TS-Objekt sollte dann unabhängig vom Caching seine PID behalten können. Wäre zumindest mal ein Ansatz...

Beispiel z.B. unter http://vladadev.wordpress.com/2011/01/05/typo3-eigenes-php-script-verwenden/

Chrissli ·

Ansonsten wenn du dich mit PHP etwas auskennst:
Aus einem PHP-Skript für PHP_SCRIPT_* eines für USER zu machen ist gar nicht so aufwändig,
im Prinzip kommt der komplette Inhalt in eine Klassenmethod und wird im Typoscript etwas anders eingebunden.
Dafür hast du hier auf jeden Fall die Option Funktionsparameter mit zu übergeben:

page.includeLibs.meineKlasse = fileadmin/user_meineKlasse.php
...
temp.mitarbeiterIrgendwas = USER_INT
temp.mitarbeiterIrgendwas {
  userFunc = user_meineKlasse->main
  userFunc.mitarbeiter = 24
}
<?php
#user muss vorne anstehen
class user_meineKlasse {
  public function main($content,$conf) {
    #$conf['mitarbeiter'] == 24 wie definiert
    # prinzip wie bei PHP_SCRIPT_* $content rein, $content raus
    return $content
  }
}
?>
leof ·

Danke für eure Infos.
Richtig - in 6.0 wird es PHP_SCRIPT* nicht mehr geben.
Daher habe ich das php in eine Extension gesteckt - ist zwar etwas aufwändiger zu schreiben, da es neu für mich ist, aber wesentlich funktioneller - im Endeffekt ist das ja das, was Chrissil vorgeschlagen hat...
Liebe Grüße,
Leo