Pfüren ob User angemeldet ist - im Template

Hi,

 

gibt es eine Möglichkeit im Template zu prüfen ob ein User eingeloggt ist?

a la

 {if $sUserData.firstname != "" && $sUserData.lastname != ""}

LG

Hi,

funktioniert “isset” nicht? 

Allgemein solltest du bedenken, dass wegen des HTTP-Caches nicht auf jeder Seite sinnvoll auf den Nutzernamen geprüft werden kann - eigentlich nur im Account-Bereich und im Warenkorb und natürlich individuellen Seiten. Viele andere Seiten werden im Standard ja gecacht.

Daniel

also ich möchte oben in der top-navigation, je nachdem ob ein user angemeldet ist, verschiedene optionen anzeigen.
Hier fliegt ja ein Widget-Bsp. umher, doch die top-navigation ist ja auf jeder seite und ich kann ja nicht jede seite vom Cache ausschießen :confused:

Gibt es hierfür einen Lösungsansatz?

 {if $sUserLoggedIn} müsste funktionieren?!

Gruß

hi,

nein, das mit

 $sUserLoggedIn

funktioniert nicht :confused:

Du musst sowas innerhalb eines Widgets machen und ggf. dafür ein eigenes Plugin schreiben, denn alles was du im Template machst, wird gecached und dann ist der erste User dafür verantwortlich ob allen “du bist eingeloggt” oder allen “du bist nicht eingeloggt” angezeigt wird.

1 Like

Hey,

also ich habe es jetzt so gemacht wie in dem ExcludeTemplate-Widget und dem GlobalVariables-Tutorial beschrieben. Funtkioniert auch ganz gut, nur komme ich grad nicht ganz klar mit einer simplen IF-Abfrage im Template :smiley:

Ich möchte also abfragen welcher Kundengruppe der eingeloggte User angehört. Die getCustomerGroupAction() ist da und wirft auch den richtigen Wert an der richtigen Stelle:
Ein: _ {action module=widgets controller=GlobalVars action=getCustomerGroup} _ gibt mir ein EK aus,
wogegen ein: {if {action module=widgets controller=GlobalVars action=getCustomerGroup} == „EK“} immer falsch ist.

Also irgendwas läuft da komplett daneben… ich weiss schon warum ich den Smarty-Dreck hasse.
 

{assign var=„cGroup“ value={action module=widgets controller=GlobalVars action=getCustomerGroup}}
in {$cGroup} steht jetzt EK aber {if $cGroup == „EK“}  ist nicht erfüllt!

{$userGroup = settype ($cGroup, ‚string‘)} 
in {$userGroup } steht jetzt 1… (!?)  
                             

Was mache ich falsch?

Das geht so nicht. Selbst wenn du das, was dir das Widget zurück gibt, in einer Bedingung einfangen und auswerten könntest, wäre die Prüfung innerhalb der gecachten Stelle und würde dann bei jedem User gleich sein. Alles was du pro Usergruppe machen willst, muss INNERHALB deines Widgets passieren, da dies nicht gecached wird. Du musst also mit Hilfe deines Widgets auch die Ausgabe so umgestalten, wie du es willst. Oder aber du deaktivierst jeglichen Cache deines Shops, dann kannst du es theoretisch auch ohne Widget tun. Aber das würde ich niemals machen.

Hi,

also das kann ich nicht bestätigen.
Habe es jetzt auf mehreren Rechnern getestet. Auf zweien mit zwei verschiedenen eingeloggten Accounts, auf einem anderen ohne eingeloggten User. Funktioniert wunderbar.
Die Lösung war, dass ich sie Rückgabe vorher im widget casten musste.
 

Joscha Schultze hat recht :wink:

aber wie kann es sein, dass ich trotz eingeschaltetem cache die daten bekomme?

OK… wie sieht dann deine Rückgabe aus?

denn:

{assign var=“cGroup” value={action module=widgets controller=GlobalVars action=getCustomerGroup}}
in {$cGroup} steht jetzt EK aber {if $cGroup == “EK”}  ist nicht erfüllt!

das geht nicht weil smarty der variablen immer die Funktion(!) und nicht das Ergebnis der Funktion zuweist. Total dämlich bin ich auch schon drüber gestolpert.

 

Sowas würde vielleicht mit {capture} gehen aber wie schon geschrieben ist es unerheblich, da die Ausgabe gecached werden würde (da nicht innerhalb eines Widgets). 

@steinsoftware schrieb:

OK… wie sieht dann deine Rückgabe aus?

denn:

{assign var=„cGroup“ value={action module=widgets controller=GlobalVars action=getCustomerGroup}}
in {$cGroup} steht jetzt EK aber {if $cGroup == „EK“}  ist nicht erfüllt!

das geht nicht weil smarty der variablen immer die Funktion(!) und nicht das Ergebnis der Funktion zuweist. Total dämlich bin ich auch schon drüber gestolpert.

 

Die Rückgabe ist halt EK oder H
 

$userData = Shopware()->Modules()->Admin()->sGetUserData();
-----------
$uGroup = (string) self::$userData['additional']['user']['customergroup'];                
$args->getSubject()->View()->assign("sUserGroup", $uGroup);

es funktioniret und ich hab den Cache an. Wo ihr das behauptet werd ich natürlich stutzig ob ich noch bei klarem Verstand bin :confused:

es funktioniret und ich hab den Cache an. Wo ihr das behauptet werd ich natürlich stutzig ob ich noch bei klarem Verstand bin :/

Hast du auch wirklich den httpd Cache an?

also die einstellung ist gesetzt

unter themes-einstellungen ist die option cache deaktivieren nicht aktiv und der shop läuft im produktiv-modus

habe ich etwa noch was übersehen?

Entweder ist die Stelle vom Cache sowieso ausgenommen, wo du das machen willst oder du machst das, was du machen willst in einem anderen Widget oder dein Cache arbeitet nicht vernünftig. Denn das was du vorhast, würde komplett der Cache-Logik von Shopware wiedersprechen. Ich habe das selbe übrigens auch mal probiert und da bestätigte sich auch bei mehreren Tests, dass das so nicht geht.