2016-07-01 38 views
1


Ich habe eine Seite mit einem TYPO3-Plugin, das den "Tipp des Monats" anzeigt. Ich habe Elemente im Listenmodul gefüllt, die ein Start-/Enddatum für den jeweiligen Monat haben.TYPO3 Seitencache-Lebensdauer auf einen genauen Monat (und nicht 31 Tage) setzen

Die Sache ist, ich muss entweder den Cache deaktivieren (oder es auf nur 1 Tag einstellen) oder es manuell spülen, oder die Spitze des letzten Monats wird noch angezeigt.
Ich möchte die Seite zwischengespeichert werden, aber der Cache ist nur gültig bis zum 1. eines jeden Monats. Wenn Sie die Lebensdauer der Seite im Hintergrund auf "1 Monat" festlegen, wird eine Lebensdauer von 2678400 Sekunden (31 Tage) festgelegt, was bei Monaten, die kürzer als 31 Tage sind, nicht funktionieren würde. Oder gibt es bereits eine Funktionalität, die die tatsächliche Länge des aktuellen Monats berechnet? (Ich kann nicht einen ganzen Monat warten, um es zu testen.)

Ich weiß, es ist cache.lifetime in TypoScript, aber man kann nur einen integer (Betrag in Sekunden), „unbegrenzt“ (kein Ablauf bis "default" (wie in config.cache_period konfiguriert) oder stdWrap.

Ich weiß, dass die letzte erstellte Cache Datetime über "Date" Header in der Antwort gesendet wird. Also sollte TYPO3 irgendwo diesen Zeitstempel kennen.

So brauche ich so etwas wie:

<?php 
    $dateStart = new DateTime($pageLastCreated_whencever); 
    $dateEnd = new DateTime(); 
    $dateEnd->modify('first day of +1 month'); 
    $dateDiff = $dateStart->diff($dateEnd); 
    return $dateDiff->format('%s'); // equals cache lifetime 
?> 

Könnte jemand mich in die richtige Richtung schieben? obwohl
Ich würde gerne, um zu vermeiden eine Benutzerfunktion zu verwenden, ...


Vielen Dank im Voraus.

Antwort

0

Es tut nicht weh, den Cache in TYPO3 von Zeit zu Zeit zu löschen.

Ich würde empfehlen, config.cache_clearAtMidnight = 1 verwenden, so dass Sie sicher sind, dass Ihr Update am ersten jeden Monats zeigt. Dann könnten Sie einen Schedulartask verwenden, um den Cache direkt nach dem Löschen neu zu erstellen.

bearbeiten

sah ich ein bisschen durch die docs, und was Sie auf jeden Fall tun können, die cache_clearAtMidnight in einem typoscript Zustand wickeln, die überprüft, ob the dayofmonth kleiner als zwei ist.

Dies wäre Ihr vollständiges Typoscript, das zu Ihrer Seiteneinrichtung geht. Kein PHP benötigt.

[dayofmonth < 2] 
    config.cache_clearAtMidnight = 1 
[global] 
+0

Vielen Dank für den Tipp, aber wie erreiche ich tatsächlich den Automatismus der Cache-Lebensdauer bis zum ersten des folgenden Monats? Ich weiß nicht, ob mein Beispielcode tatsächlich funktioniert (und wie man es in TypoScript macht), oder wo ich das Datum der letzten Seitenerstellung bekommen könnte. – Seika85

+0

Ich habe die Antwort aktualisiert. Mach dir keine Sorgen um das Leben. Ihre Seite wird zwischengespeichert, bis Sie sie löschen. –

+0

Lassen Sie uns durch ein Beispiel gehen: \t Es ist 2016-07-31 23:59 und es dreht sich um 2016-08-01 00:00. Nur dann ist die Bedingung gültig und die von Ihnen vorgeschlagene Konfiguration ist eingestellt.Aber Mitternacht ist vorbei. Bedeutet das nicht, dass der Cache stattdessen am 02.08.2016 00:00 gelöscht wird? – Seika85

0

Wie Sie herausgefunden haben, ist die Cache-Zeit in Sekunden erledigt. Die einzige Lösung wäre, eine benutzerdefinierte Scheduler-Task zu verwenden, die den Cache nach Ihren Bedürfnissen löscht.

+0

Und wie lege ich einzelne Cache-Lebenszeiten pro Seite fest, und wie erkenne und interpretiere ich sie im Scheduler? – Seika85

+0

Diese Logik wäre zu 100% Ihnen überlassen. Erstellen Sie eine einfache Tabelle mit Spalten "Seiten-ID" und "Lebensdauer" und überprüfen Sie jeden Aufruf, wenn die Anforderung erfüllt ist. Wenn Sie fertig sind, können Sie den Cachemanager aufrufen und für diese Seiten löschen. –

+0

Also würde ich zusätzlich eine Art BackEnd-Modul (Admin-Tool) einrichten müssen, um die Cache-Lebensdauer jeder Seite tatsächlich aufzufüllen und beizubehalten. Oder ich müsste eine Erweiterung schreiben, die die Seitenkonfiguration erweitert, um sie bequem einstellen zu können ... --- Wie ich schon sagte, möchte ich nicht einmal eine Benutzerfunktion verwenden. Und jetzt müsste ich eine ganze Erweiterung schreiben. Nun, ich denke, ich muss zumindest darüber nachdenken, ob alles andere fehlschlägt ... – Seika85