Hi,
ich habe eine stark gewachsene pibase basierte Extension "aufgeräumt". Bisher steckte alles in der Pi1-Klasse, was das reines Chaos war. Ich habe jetzt alles in mehrere Controller unterteilt, so dass man die Extension sauber und strukturiert weiterentwickeln kann.
Es gibt jetzt also einen neuen Ordner "controller", in dem es pro DisplayMode (DetailView, ListView, etc.) eine eigene Controller-Klasse gibt (z.B. class.tx_meineext_displayview_controller.php). In der Pi1-Klasse wird dann nur noch abgefragt, welcher Wert aus dem Flexform kommt und der entsprechende Controller instanziert und aufgerufen.
switch($displayMode)
{
case 'detailView':
$dVController = t3lib_div::makeInstance('tx_meineext_detailview_controller', $this);
$content = $dVController->main();
break;
...
}
Jetzt weiß ich aber nicht wie sich das Caching verhält. Vor meiner Umstruktierung war die Extension gemäß dieser Seite konfiguriert:
http://www.sk-typo3.de/Richtiges-Cachen-mit-pi_base.188.0.html
Nun hab ich das was auf dieser Seite beschrieben wird in jedem Controller nachgebildet. Jeder Controller hat eine eigene "main"-Funktion, welche nach der Instanzierung in Pi1 aufgerufen wird. In einer solchen "main"-Funktion stehen am Anfang folgende Zeilen:
$cache = 0;
$this->getPiBase()->pi_USER_INT_obj = 1;
"getPiBase()" ist eine eigene Funktion um das aktuelle Object der Pi1-Klasse zu erhalten. Sollte jetzt nicht weiter stören.
In der Pi1-Klasse gibt es folgende Klassenattribute:
public $pi_checkCHash = TRUE;
public $pi_USER_INT_obj;
"main"-Funktion in Pi1 setzt auch folgende Variable:
$this->pi_USER_INT_obj = 1;
In der Listenansicht gibt es z.B. eine Sortierfunktion (title, crdate). Die Listenansicht darf also nicht gecachet werden, sonst funktioniert die Sortierung nicht. Mit $this->getPiBase()->pi_USER_INT_obj = 1; im entsprechenden Controller sollte ich also erreichen können, dass nichts gecachet werden soll, oder?
Aber das funktioniert nicht. Ich öffne die Seite, klicke auf die Sortierung und erhalte wieder die Standardausgabe, welche anscheinend beim ersten Seitenaufruf gecachet wurde.
In der ext_localconf.php Datei steht auch folgendes:
t3lib_extMgm::addPItoST43($_EXTKEY, 'pi1/class.tx_meineext_pi1.php', '_pi1', 'list_type', 1);
Was gibt es noch zu beachten?
Kann man die Cache-Steuerung pro Controller überhaupt machen oder gilt das nur für die Pi1-Klasse?