Feature #759
cache resistente InsertTags (eigene)
| Status: | Completed | Start: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assigned to: | leo | % Done: | 0% |
|
| Category: | framework | |||
| Target version: | 2.8.0 |
Description
Per Hook durch "replaceInsertTags" geänderte Tags landen immer im ersetztem Zustand im TL-Cache.
Die Idee ist nun, durch eine Angabe, z.B. "nocache", im Tag selbst zu steuern, dass dieser nicht im TL-Cache landen soll.
So könnte das aussehen:
{{nocache::visitors::count}}
Ein Idee zu Umsetzung (ungetestet):
in /system/libraries/Controller.php den Skip erweitern:
// Skip certain elements if the output will be cached
if ($blnCache)
{
if ($elementsr0 == 'date' || $elementsr0 == 'file' || $elementsr0 == 'nocache' || $elementsr1 == 'back' || $elementsr1 == 'referer')
{
$strBuffer .= '{{' . $strTag . '}}';
continue;
}
}
und weiter unten wo die Hooks aufgerufen werden den "nocache" Marker eliminieren.
Dadurch kann man "nocache" setzen oder auch nicht, ohne in der Hook-Function die aufgerufen wird danach filtern zu müssen.
foreach ($GLOBALS['TL_HOOKS']['replaceInsertTags'] as $callback)
{
if ( strtolower($elementsr0) == 'nocache' ) {
array_splice($strTag, 0,1);
}
....
History
Updated by leo about 1 year ago
- Status changed from New to Accepted
Ich denke die beste Lösung wäre es, eigene Insert-Tags überhaupt nicht im Cache zu speichern. Der Entwickler der Callback-Funktion kann ja dann dort einen Cache einbauen wenn es sinnvoll ist.
Updated by leo 11 months ago
- Status changed from Accepted to Completed
Ich habe die if-Abfrage so erweitert, dass Tags, die mit cache_ beginnen, nicht ersetzt werden. Das Tag {{cache_visitors::count}}) würde also unverändert in den Zwischenspeicher geschrieben und erst bei der Ausgabe der Seite letztendlich ersetzt.
if ($elements[0] == 'date' || $elements[0] == 'file' || $elements[1] == 'back' || $elements[1] == 'referer' || strncmp($elements[0], 'cache_', 6) === 0)
Also available in: Atom