SW5 und Cache bei Plugin unterbinden?

  1. Versuch um eine Lösung zu finden:

Für ein TagCloud-Plugin soll das jeweilige Plugin (bzw. bei Enlight_Controller_Action_PostDispatch_Frontend_Index) vom HTTPCache ausgeschlossen werden. Bisherige Versuche enden mit einem 503-Error im Shop. Bei einem SW 5.1. konnte ich dies ohne Probleme mit einem disableControllerCache() realisieren. Bei SW 5.2.6 kommt es zur besagten Fehlermedlung. Welche Lösung, welchen Weg, gibt es bei 5.2 ???

Hi,

was ist denn die Fehlermeldung? Gibt es was in den Logs? Kannst du vll. temporär die Fehlerausgabe aktivieren (Debugging Shopware). Ansonsten könnte man auch den no-cache-header direkt setzen: 

 $this-\>Response()-\>setHeader('Cache-Control', 'private', true); 

Besten Gruß,

Daniel

Zunächst erst mal Danke für die Antwort!

Zur Fehlermeldung und meiner Vorgehensweise:

Mein Versuch in der Bootstrap:

$httpCache = Shopware()->Plugins()->Core()->HttpCache();
$httpCache->disableControllerCache();

Im Produktivmodus geht das komischerweise wunderbar. Setze ich den Shop jedoch in Bearbeitungsmodus, dann kommt nur noch eine weiße Seite mit:

Fatal error: Call to a member function setHeader() on null in /var/.../engine/Shopware/Plugins/Default/Core/HttpCache/Bootstrap.php on line 1050
503 Service Unavailable

HttpCache ist hier auf aktiv geschaltet, so wie es sein sollte.

Mit der Zeile $this->Response()->setHeader(‘Cache-Control’, ‘private’, true); erhalte ich im Produktivmodus diesen Fehler:

Method "Shopware_Plugins_Frontend_xxxTagCloud_Bootstrap::Response" not found failure in 
engine/Shopware/Plugins/Community/Frontend/xxxTagCloud/Bootstrap.php on line 336

Im Log-Verzeichnis steht nur die letzte Fehlermeldung.

Nachtrag: Oder kann ich in der Bootstrap irgendwie abfragen, ob HttpCache() aktiv ist? Oder Abfragen ob Bearbeitungsmodus oder Produktivmodus? Damit könnte man dies sauber umgehen.

Hi,

es gibt doch in der Bootstrap.php  jedes Plugins die Methode \Shopware_Components_Plugin_Bootstrap::disableControllerCache - die prüft eigentlich, ob der Cache da ist oder nicht? Ansonsten kann man das wie folgt prüfen:

        $httpCache = Shopware()->Plugins()->Core()->HttpCache();

        if (!$httpCache instanceof Shopware_Components_Plugin_Bootstrap) {
            return null;
        }

        /**@var $plugin Plugin */
        $plugin = Shopware()->Models()->find(Plugin::class, $httpCache->getId());

        if (!$plugin->getActive() || !$plugin->getInstalled()) {
            return null;
        }

So wird es zumindest im Core gemacht.

Daniel

1 Like

Danke für den Hinweis. Ich werde das mal probieren.

Hatte ein ähnliches Problem. Hier die Lösung:
https://synonymous.rocks/http-cache-in-shopware-mittels-plugin-deaktivieren/

$plugin->getActive()

Diese Abftrage brachte mich zum Ziel :slight_smile:

@Synonymous schrieb:

Hatte ein ähnliches Problem. Hier die Lösung:
https://synonymous.rocks/http-cache-in-shopware-mittels-plugin-deaktivieren/

Meine Ansätze sahen auch so aus, aber beim Wechsel von Produktivmodes/Bearbeitungsmodus geht der Shop nicht mehr. 

Genau das was ich mir vorgestellt habe:
 

    $httpCache = Shopware()->Plugins()->Core()->HttpCache();
    $plugin = Shopware()->Models()->find('\Shopware\Models\Plugin\Plugin', $httpCache->getId());
    if ( $plugin->getActive() ) {
      $httpCache->disableControllerCache();
    }

Dann gibt es auch keine Probleme beim Wechsel von Protuktivmodus in Bearbeitungsmodus. Getestet in SW 5.2.6

1 Like