Seite 1 von 1
Cache per Backend-Button löschen?
Verfasst: Do 14. Jul 2011, 11:48
von dosenbrot
Hallo liebe Community,
um unsere Seite mit Contenido 4.8.11 flott zu halten, nutzen wir den Cache mit 60 Minuten. Nun haben wir einen fleißigen Redakteur ohne Adminrechte, der an manchen Tagen News veröffentlicht, die nicht so lange warten können. In typo3 und anderen Systemen ist mir im Backend ein Button bekannt, mit dem sich der Cache per Mausklick auch für Redakteure im Bedarfsfall löschen lässt.
Frage: Gibts in Contenido auch die Möglichkeit und wenn ja, wie???
Danke für eure Hilfe!!!
Grüße
dosenbrot
Re: Cache per Backend-Button löschen?
Verfasst: Do 14. Jul 2011, 12:30
von Spider IT
Hallo dosenbrot,
in der 4.8.15 (ich meine ab 4.8.13) gibt es im Backend unter Administration - Bereinigung diese Möglichkeit.
Alternativ kannst du das Notwendige in ein Modul verpacken, welches sich nur im Editor zeigt, dann kann es jeder Redakteur ohne zusätzlichen Freigaben und unabhängig von der Contenido-Version.
Das was du machen solltest, ist die Tabelle <prefix>_code leeren und den Cache löschen:
Code: Alles auswählen
# Tabelle <prefix>_code leeren
$db->query('TRUNCATE TABLE ' . $cfg['tab']['code']);
# Verzeichnis ./cache/ leeren
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/';
$Files = scanDirectory($Path, false);
if (is_array($Files)) {
foreach ($Files as $key => $File) {
unlink($File);
}
}
Wenn du dass dann noch über eine Schaltfläche (Formular) startbar machst (natürlich nur im Editor, also Abfrage if ($edit) { }) ist dein Modul fertig

Re: Cache per Backend-Button löschen?
Verfasst: Do 14. Jul 2011, 17:18
von dosenbrot
Hallo Spider,
danke für deine Tipps!

Ich stehe heute wohl etwas auf dem Schlauch...
Zu meinem Verständnis:
Ich lege ein Modul mit folgendem Inhalt an:
Code: Alles auswählen
if ($edit) {
# Tabelle <prefix>_code leeren
$db->query('TRUNCATE TABLE ' . $cfg['tab']['code']);
# Verzeichnis ./cache/ leeren
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/';
$Files = scanDirectory($Path, false);
if (is_array($Files)) {
foreach ($Files as $key => $File) {
unlink($File);
}
}
}
Dieses kann ich in das normale Template integrieren und es erscheint nur im Editor ein Button?
Die Tabelle <prefix>_code muss auch gelöscht werden?
Danke und Grüße
Re: Cache per Backend-Button löschen?
Verfasst: Do 14. Jul 2011, 17:43
von Spider IT
dosenbrot hat geschrieben:Ich stehe heute wohl etwas auf dem Schlauch...
Macht nix
dosenbrot hat geschrieben:Zu meinem Verständnis:
Ich lege ein Modul mit folgendem Inhalt an:
Code: Alles auswählen
if ($edit) {
# Tabelle <prefix>_code leeren
$db->query('TRUNCATE TABLE ' . $cfg['tab']['code']);
# Verzeichnis ./cache/ leeren
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/';
$Files = scanDirectory($Path, false);
if (is_array($Files)) {
foreach ($Files as $key => $File) {
unlink($File);
}
}
}
Dieses kann ich in das normale Template integrieren und es erscheint nur im Editor ein Button?
Nein, das ist lediglich der ausführende Code, den Rest für das Formular mit Button (nur im Editor) sowie die Ausführung dieses Codes nur wenn der Button geklickt wurde musst du noch dazu programmieren.
dosenbrot hat geschrieben:Die Tabelle <prefix>_code muss auch gelöscht werden?
GeLEERT, nicht gelöscht.
Das ist aber schon am Anfang meines Codes drin
Gruß
René
Ach was solls, hier ist der fertige Code:
Code: Alles auswählen
<?php
# Button geklickt? Dann ausfuehren!
if (isset($_POST['CacheLeeren'])) {
# Tabelle <prefix>_code leeren
$db->query('TRUNCATE TABLE ' . $cfg['tab']['code']);
# Verzeichnis ./cache/ leeren
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/';
$Files = scanDirectory($Path, false);
if (is_array($Files)) {
foreach ($Files as $key => $File) {
unlink($File);
}
}
}
# Im Editor ein Button zum Leeren des Caches einblenden
if ($edit) {
?>
<form name="frmClearCache" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<input type="submit" name="CacheLeeren" value="Cache leeren" />
</form>
<?php
}
?>
Ja, das Modul kommt dann in das normale Template rein und die Autoren sehen dann den Button.
Re: Cache per Backend-Button löschen?
Verfasst: Do 14. Jul 2011, 18:04
von dosenbrot
Super nett von dir, danke! Es funktioniert. Habs noch minimal erweitert, damit die html-Seiten auch gelöscht werden (aus dem Ordner cache/content/):
Code: Alles auswählen
<?php
# Button geklickt? Dann ausfuehren!
if (isset($_POST['CacheLeeren'])) {
# Tabelle <prefix>_code leeren
$db->query('TRUNCATE TABLE ' . $cfg['tab']['code']);
# Verzeichnis ./cache/ leeren
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/';
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/content/';
$Files = scanDirectory($Path, false);
if (is_array($Files)) {
foreach ($Files as $key => $File) {
unlink($File);
}
}
}
# Im Editor ein Button zum Leeren des Caches einblenden
if ($edit) {
?>
<form name="frmClearCache" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<input type="submit" name="CacheLeeren" value="gesamten Cache leeren!" />
</form>
<?php
}
?>
Ist das so korrekt oder macht man das anders?
Als Belohnung gibts gleich ne paypal Kaffeespende!

DANKE noch einmal!!!
Re: Cache per Backend-Button löschen?
Verfasst: Do 14. Jul 2011, 18:17
von Spider IT
dosenbrot hat geschrieben:Habs noch minimal erweitert, damit die html-Seiten auch gelöscht werden (aus dem Ordner cache/content/):
Code: Alles auswählen
...
# Verzeichnis ./cache/ leeren
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/';
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/content/';
$Files = scanDirectory($Path, false);
if (is_array($Files)) {
foreach ($Files as $key => $File) {
unlink($File);
}
}
...
Ist das so korrekt oder macht man das anders?
Nicht ganz, du löscht jetzt nur die Dateien aus cache/content/ und nicht mehr aus cache/.
Die nachfolgenden Zeilen listen erst die Dateien auf und löschen sie dann, also
Code: Alles auswählen
...
# Verzeichnis ./cache/ leeren
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/';
$Files = scanDirectory($Path, false);
if (is_array($Files)) {
foreach ($Files as $key => $File) {
unlink($File);
}
}
$Path = $cfgClient[$client]['path']['frontend'] . 'cache/content/';
$Files = scanDirectory($Path, false);
if (is_array($Files)) {
foreach ($Files as $key => $File) {
unlink($File);
}
}
...
dosenbrot hat geschrieben:Als Belohnung gibts gleich ne paypal Kaffeespende!

DANKE noch einmal!!!
Ist angekommen, vielen Dank dafür!
Gruß
René
Re: Cache per Backend-Button löschen?
Verfasst: Do 14. Jul 2011, 18:20
von Oldperl
Alternativ hier eine Lösung per CEC mit einer entsprechenden Chain für Contenido.
http://forum.contenido.org/viewtopic.php?f=66&t=31432
Gruß aus Franken
Ortwin