Cache per Backend-Button löschen?

Gesperrt
dosenbrot
Beiträge: 102
Registriert: Fr 27. Aug 2004, 15:37
Kontaktdaten:

Cache per Backend-Button löschen?

Beitrag 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
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Cache per Backend-Button löschen?

Beitrag 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 :)
dosenbrot
Beiträge: 102
Registriert: Fr 27. Aug 2004, 15:37
Kontaktdaten:

Re: Cache per Backend-Button löschen?

Beitrag 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
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Cache per Backend-Button löschen?

Beitrag 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.
dosenbrot
Beiträge: 102
Registriert: Fr 27. Aug 2004, 15:37
Kontaktdaten:

Re: Cache per Backend-Button löschen?

Beitrag 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!!!
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Cache per Backend-Button löschen?

Beitrag 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é
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Cache per Backend-Button löschen?

Beitrag von Oldperl »

Alternativ hier eine Lösung per CEC mit einer entsprechenden Chain für Contenido.
:arrow: http://forum.contenido.org/viewtopic.php?f=66&t=31432

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Gesperrt