Random Logo - Cache - Smarty Function

Hallo,

ich möchte im logo-container ein random Logo ausspielen. die Logos haben alle den gleichen Namen nur eine 1-19 am Ende. Diese Zahl möchte ich random generieren und sie soll nicht bei jedem Seitenaufruf neu generiert werden sondern erst beim Browser schließen und wieder öffnen.

Aktuell habe ich eine Smarty function im _private/smarty erstellt die per PHP die Random Nummer generiert und in die $_SESSION schreibt und die random nummer zurückgibt. Wenn der hhtp cache deaktiviert ist funktioniert das auch wunderbar allerdings sobald der http cache aktiv ist bekomme ich bei manchen Seiten eine neue random nummer zurück. Das soll ja nicht so sein. Jemand eine Idee wie man das auf schnellsten Wege machen kann?

 

grüße und danke

Wer zuerst die Seite aufruft, der “cached” zuerst - also können, wenn mehere Leute verschiedene Seiten aufrufen, auch verschiedene “Random” ausgeliefert werden, weil ja schon generiert.
Da hilft wie immer an dieser Stelle: Das Logo via action-tag einbinden, und die Logic für das Logo in ein Widget auslagern.Shopware HTTP cache

Aber ich dachte die Smarty functions werden nicht gecached. Ist das falsch? Ich schreibe es ja in die SESSION des users.

Wenn eine Seite einmal gerendert wird und nicht vom Cache ausgenommen ist, ist sie gerendert und im Cache - da kommt Smarty erst gar nicht mehr zum Zug.
So Sachen z.B. wie der „Warenkorbbutton“ im Header werden ja über ein Widget nachgeladen.

Wenn Du eine neue Randomnummer „bekommst“, muss diese ja nicht unbedingt von Smarty/aus der Session kommen, sondern es könnte eine bereits durch einen dritten aufgerufene Seite aus dem Cache sein.

Ok, ich bin noch nicht wirklich in der Plugin Entwicklung drin bei Shopware. Vielleicht kannst du mir noch weiter helfen. Ich find auch nirgends ein Beispiel wie man ein Frontend Widget Plugin erstellt.

Ist z.b. das das richtige Event zum subscriben?

$this->subscribeEvent(
            'Enlight_Controller_Dispatcher_ControllerPath_Widgets_SwagPluginName',
            'getWidgetController'
        );

/**
     * @return string
     */
    public function getWidgetController(Enlight_Event_EventArgs $arguments)
    {
        return $this->Path() . '/Controllers/Widgets/SwagPluginName.php';
    }

Danke