[TYPO3-german] Cache in Extensions

Peter Linzenkirchner liste at lisardo.de
Sun Aug 8 19:25:09 CEST 2010


Hallo Helmut, 

nochmals vielen Dank für deinen Link! 

Ich bin endlich dazu gekommen, es auszuprobieren. Es funktioniert, allerdings stimmt die Syntax in deinem Link nicht; offenbar wurde diese im Realease nochmals geändert. Damit auch andere was davon haben, hier meine Erkenntnisse in dem Zusammenhang im Überblick: 

---

Das hier funktioniert ab TYPO3 Version 4.3: 

Normales Plugin erstellen, konfiguriert als USER-Objekt. Das hier in die main-function: 

if ($this->cObj->getUserObjectType() == tslib_cObj::OBJECTTYPE_USER) { 
   $content .= 'Ich bin ein USER Objekt.<br>'; 
   if (!$this->conf['allowCaching']) { 
       $this->cObj->convertToUserIntObject(); return ''; 
    } 
} else { 	
    $content .= 'Nun bin ich ein USER_INT Objekt<br>'; 
}

Das ganze läuft also abhängig von einer Typoscript-Einstellung. Das hier 

plugin.tx_myExt_pi1 (
   allowCaching = 0; 
)

macht die Extension zur USER_INT, die nicht gecacht wird. Das ist schon mal eine gute Sache, allerdings wäre das auch so möglich, ganz ohne irgendeinen PHP-Code. Dieses Typoscript:  

plugin.tx_myExt_pi1 = USER_INT

macht die Extension ebenfalls nachträglich zu einer USER_INT. Das erlaubt auch Konstruktionen wie: 

[globalVar = TSFE:id = 100] 
   plugin.tx_tx_myExt_pi1 = USER_INT 
[global]

etc. 

---

Interessant ist aber, dass die neuen Funktionen von TYPO3 4.3 es auch erlauben, das Caching über die Flexforms zu regeln: 

Das hier in die main-Function: 

switch ($this->conf['code']) { 
   case 'FORM': 
      $this->cObj->convertToUserIntObject();
      $content .= 'Bin jetzt ein USER_INT-Objekt und cache nicht.'; 
    break; 
    default: 
       $content .= 'Bin ein USER-Objekt und cache. '; 
    break; 
}

Das Plugin wird standardmäßig als USER angelegt und durch einfache Auswahl z. B.  in den Flexforms umgestellt auf USER_INT. Das ermöglicht die mehrmalige Verwendung des Plugins auf einer Seite, wahlweise als USER oder als USER_INT. Und damit muss ich endlich nicht mehr für Listendarstellung, Einzeldarstellung und Formular getrennte Plugins bauen.  

--- 

Aber ich habe noch was gefunden: machmal besteht die Notwendigkeit, innerhalb einer gecachten Extension eine einzelne Ausgabe ungecached machen zu lassen - z. B. die Ausgabe einer Zeit. Das kann man über ein kleines zusätzliches Plugin lösen, das im eigentlichen Plugin aufgerufen wird: 

$content .= 'Normale, gechachte Ausgabe. <br>'; 

$cObj = t3lib_div::makeInstance('tslib_cObj'); 
$cObj->start(array()); 
$conf2 = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_myExt_pi2.']; 
$conf2['includeLibs'] = 'EXT:myExt/pi2/class.tx_test_pi2.php'; 
// ungecachte Ausgabe aus einem anderen Plugin: 
$content .= $cObj->cObjGetSingle('USER_INT',$conf2); 

$content .= '<br> und wieder die gecachte Ausgabe ... ';

Das stammt aus dem Buch von Dimitriy Dulepov, Extension entwickeln, S. 129 und funktioniert sauber. 

--- 

Alles zusammen erlaubt eine enorm flexible Handhabung des Cache. 

Viele Grüße
Peter


>> Hi Peter,
>> 
>> On 01.08.10 23:03, Peter Linzenkirchner wrote:
>>> 
>>> Kennt jemand eine Möglichkeit, eine Extension praktisch abhängig vom Flexform einmal als USER und einmal als USER_INT einzubinden? also quasi so: 
>> 
>> http://danosipov.com/blog/?p=191
>> 
>> HTH
>> 
>> Helmut
>> _______________________________________________
>> TYPO3-german mailing list
>> TYPO3-german at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
> 
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german



More information about the TYPO3-german mailing list