Frage

Ich habe ein Problem, das mit dem Zwischenspeichern von CMS-statischen Blöcken zusammenhängt.

Ich habe eine CMS-Seite und in dieser Seite renderte ich eine Reihe von CMS-statischen Blöcken. Eine vereinfachte Version des CMS-Seiteninhalts sieht so aus:

generasacodicetagpre.

Die Seite lädt, wie sie sofort nach dem Erzielung des Blockcaches erwartet wird, diese Seite so etwas wie folgt aussehen:

generasacodicetagpre.

Nach der initischen Seitenlast ist jede nachfolgende Seitenlast den Inhalt falsch. Es sieht so aus:

generasacodicetagpre.

Im zweiten Beispiel können Sie sehen, dass die ersten beiden PROMOS korrekt sind, jedoch alles danach zeigt den falschen Inhalt für den Block_ID. Auch block Promo_Home_1_1 und promo_home_1_2 werden beide zweimal gerendert und promo_home_3_1 und promo_home_3_2 werden nie gerendert. Es ist wie das Mapping zwischen Block_ID und dem damit verbundenen statischen Blockinhalt wird irgendwie gemischt. Dies bezieht sich auf das Caching, als ob der Blockcache nicht aktiviert ist, dann sehe ich das Problem nicht mehr.

Es ist auch wahrscheinlich erwähnenswert, dass diese Seite zur Arbeit an EE 1.13 verwendet wird, jedoch nach dem Upgrade auf EE 1.14.2 dieses Problem aufgetreten ist.

Ich erkenne, dass es ziemlich schwer zu sagen ist, was nicht falsch ist, ohne zu wissen. >.

update:

Ich habe dieses auch mit Widgets, z. B.

ausprobiert generasacodicetagpre.

In diesem Fall haben alle 3 Blöcke den gleichen Inhalt zurückgegeben, obwohl die IDs auf verschiedene Blöcke in der Datenbank zeigen. Wenn der Cache gelöscht wird, ändert sich der zurückgegebene Block manchmal, aber alle drei Widgets haben immer noch den gleichen Inhalt.

War es hilfreich?

Lösung

ok, also habe ich die Ursache dieses Problems gefunden, und es scheint ein Problem in der Kernmagento zu sein.

Es gibt eine neue _construct-Methode, die Mage_CMS_BLOCK_BLOCK in Magento 1.14.2 hinzugefügt ist, der den folgenden Code enthält.

generasacodicetagpre.

Dies macht das Caching effektiv für CMS-Blöcke ein. Es ist kein Cache-Schlüssel eingestellt, sodass er auf den Mage_Core_Block_abstract zurückfällt :: getcacheKeyeinfo, der den Namen des Blocks im Layout verwendet. In diesem Fall verwenden wir eigentlich keine Layout-XML-Datei, um den Block hinzuzufügen, und es gibt keinen Namen eingestellt. Magento scheint es zu versuchen, dies zu handhaben, indem Sie etwas wie anonymous_78 als Name einstellen. Dies scheint jedoch aus irgendeinem Grund jedoch nicht zu arbeiten, weshalb die Duplikate, die ich gesehen habe.

Meine Lösung bestand darin, die Mage_CMS_BLOCK_BLOCK-Klasse in meiner eigenen Erweiterung zu überschreiben und eine neue Methode hinzuzufügen, um den Cache-Schlüssel explizit auf die Block-ID anstelle eines zugewiesenen Werts einzustellen. Die Klasse sieht so aus:

generasacodicetagpre.

Dies scheint das Problem gelöst zu haben.

update:

Es sieht so aus, als ob dasselbe Problem existiert in CE 1.9.2

Andere Tipps

Für Magento EE-Kunden fordern Sie bitte den Patch Supee-5874 aus dem Magento Enterprise Support-Team an.

Es wird zwei Dateien aktualisiert

generasacodicetagpre.

Ich kann den eigentlichen Patch nicht von Magento posten, da es ihr Eigentum ist.

Es ist froh, dass Magento auch statische Blöcke speichert.Da die aktuelle aktualisierte Version dieses selekte Problem aufgrund des Cacheing von statischen Blöcken enthält, können Sie mein Modul für absolut kostenlos verwenden.

Diese Erweiterung wird erstellt, um ein besseres Cache von statischen Blöcken zu erzielen.Es berücksichtigt auch, ob Site gesichert ist oder nicht.Auch die Erweiterung hat keine Kernschreiber, was dieses Modul noch besser macht.

Hier gehen Sie .

Für einen besseren Überblick über die Erweiterung können Sie Siehe diesen Thread .

Wir haben einen Patch für CE bereitgestellt, der dieses Problem löst.Da EE in CE-basiert, kann dies auch gelten.

Sie können diesen Pfad von meinem GIST herunterladen: https://gist.github.com/tux-rampage / 77B286F7973336877F7B

Down laden Sie den GIST, entpacken Sie es aus und führen Sie den folgenden Befehl in Ihrer Magento-Root aus:

generasacodicetagpre.

testen Sie dies auf einer Staging-Umgebung, bevor Sie es auf einem Live-System anwenden!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top