$sUserLoggedIn fehlerhaft

Hallo,

in der topbar-navigation.tpl möchte ich einen “Jetzt registrieren” Link einbauen, welcher natürlich ausgeblendet werden soll wenn der Kunde eingeloggt ist.

Allerdings ist die $sUserLoggedIn auf der Startseite, Kategorien,… trotz Login auf false. Nur auf den Seiten des Kundenkontos funktionierts.

 {if !$sUserLoggedIn}{s name="mgShoptitle_Link" namespace="frontend/index/topbar-navigation"}{/s}{/if}

 

Das die Variable nicht durchgängig vorhanden ist, bzw Inkonsistenz in der Namensgebung herrscht, hatten wir schon mehr als 1x im Forum.
Selbst wenn die Variable durchgängig verfügbar wäre, würde Dein Vorhaben bei eingeschaltetem HTTP-Cache wirre Ergebnisse liefern, da ein erstmaliges Rendern das Menü in den Cache ablegt. Dann käme eh immer das Gleiche bei raus - abhängig davon, ob beim Erstaufruf “Eingelogt oder nicht” war.
Funktion in einen eignen Widget-Controller auslagern und besagte Stelle im Menü dann via action-Tag einbinden.

Ja, nur das eine Einbindung mittels Action-Tag nicht performant genug ist.

Es sollte reichen aus

Shopware()->Modules()->Admin()->sGetUserData()

den Status zu holen und in via

Enlight_Controller_Action_PostDispatchSecure_Frontend

an das Frontend zu schicken (view->assign).

Wenn man diese dann in z.B.MeinTheme/widgets/checkout/info.tpl abfragt sollte das ganze nie gecached werden und man kann auf das action-tag verzichten.

1 „Gefällt mir“

Die Info.tpl wird auch gecached, wobei das dann in der Tat für einen Button egal ist, da zwei Versionen im Cache landen :wink: Aber er will es ja in topbar-navigation haben.
https://forum.shopware.com/discussion/41317/im-login-button-im-topmenue-soll-statt-mein-konto-nach-login-kundenname-oder-text-stehen#Comment_176084

1 „Gefällt mir“

Naja bei mir wird die in der Topbar ausgegeben… ups -> Naja Prinzip bleibt ja trotzdem das gleiche.