Feature #759

cache resistente InsertTags (eigene)

Added by BugBuster over 1 year ago. Updated 11 months ago.

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 BugBuster about 1 year ago

Das wäre natürlich auch ne Lösung.
Danke.

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