[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