Elemente nur erscheinen lassen, wenn User eingeloggt

Hallo, ist es möglich ein Element nur erscheinend zu lassen, wenn ein User im Shop angemeldet ist? Ich denke daran, eine “if-Abfrage” zu machen nach dem Motto “if user=angemeldet, dann…”. Gibt es so etwas? Wäre super, wenn mir jemand helfen könnte! Grüße Marko

Hallo, mit diesem klein Plugin wird eine Variable zur Verfügung gestellt, die es erlebt zu prüfen, ob jemand eingeloggt ist oder nicht. http://wiki.shopware.de/Globale-Variabl … 8_715.html

1 Like

Super, Danke!!! Das scheint genau das zu sein, was ich suche. Ich habe noch nie so ein plugin genutzt… wie muss ich das denn einbinden? Wäre super, wenn du mir da weiterhelfen könntest. Danke schonmal :slight_smile: Marko

das plguin tippst du einfach ab und gehst dem tutorial schritt für schritt nach. (is anschliessend im ordner /engine/shopware/plugins/local/frontend). Dann im backend unter einstellungen->plugins->lokale->aktivieren. nun haste auf allen seiten eine variable, ich glaube userLoggedIn. Die is wenn mich nicht alles täuscht 0 für true und 1 für false. damit kannste dann über smarty deine gewünschte abfrage machen. {if $userLoggedIn==0} element ein und ausblendet {/if}

Alles schön und gut, aber wenn man HTTP-Cache einschaltet, wird das ganze aus dem Cache genommen und die Abfrage funktioniert auf den gecachten Seiten nicht mehr (wie Liste oder Detail) Was kann man da machen?

Du kannst diese Abfrage bzw. die Ausgabe zb in einen widget controller auslagern und diesen in den Cache Einstellungen (Einstellungen -> Caches / Performance -> Einstellungen -> Allgemein -> HTTP-Cache) vom Cache ausnehmen. Viele Grüße

Habe mit der Lösung noch gezögert (da ein Controller mit evtl. vielen Parametern nötig ist bzw. evtl. neue Views) Und gehofft, dass es einfacher gehen würde… Werde gleich ausprobieren.

Hallo zusammen, ich bin total neu bei Shopware und es ist das erstmal das ich damit arbeite. Ich benötige genau diese Funktion um Elemente erst anzeigen zu lassen, wenn der User eingeloggt ist. Ich habe also den Code von http://wiki.shopware.de/Globale-Variabl … 8_715.html in /…/engine/Shopware/Plugins/Local/Frontend gespeichert, jedoch bekomme ich im Backend folgende Fehlermeldung Fatal error: Class ‚Shopware_Plugins_Frontend_loggedin_BootstrapDummy‘ not found in /…/engine/Shopware/Components/Plugin/Namespace.php on line 254 503 Service Unavailable Leider sind meine Programmierkenntnisse sehr mager, jedoch benötige ich diese Funktion dringend in Shopware. Wenn mir also jemand weiterhelfen könnte, wäre das super. Grüße

Könnte mir hier bitte jemand weiterhelfen, das Problem zu lösen? Danke und Grüße Mike

Hallo sicco0803, entferne das Plugin wieder - das wird nicht mehr benötigt. Du kannst im Template simpel auf „sUserLoggedIn“ prüfen, bspw. so: {if $sUserLoggedIn} //Deine Elemente {/if} Gruß, Patrick :shopware:

Oh … super danke. :slight_smile:

Leider funktioniert das doch nicht wie gedacht. Ich möchte folgendes erreichen. {if $sUserLoggedIn} Elemente für eingeloggt {else} Elemente für Gäste {/if} Jedoch funktioniert das nicht, nach dem einloggen bleiben die Elemente für die Gäste und werden nicht geändert.

Ich habe herrausgefunden das die Funktion nicht angesteuert wird, der Debug gab folgendes aus $sUserLoggedIn Smarty_Variable Object (3) ->value = false ->nocache = null ->scope = “snippet:frontend/index/checkout_actio…” egal ob angemeldet oder nicht.

Kann mir bitte jemand helfen, ich komme echt nicht weiter und weiß nicht wo der Fehler liegt das es nicht funktioniert. Vielen Dank und Grüße Mike

Gibt es hierfür schon eine Lösung?

Wäre auch für Infos dankbar - mit der 

 {if $sUserLoggedIn} konnte ich bisher auch keine Ergebnisse erzielen. Gleiches Problem

Da es scheinbar echt nicht möglich ist “ab Werk” zu prüfen ob ein User angemeldet ist oder nicht hier mein PluginCode das die Variable $UserID im Template verfügbar macht. Die kann man dann auf der ganzen Seite abfragen.

public function install()
    {
        $this->subscribeEvent('Enlight_Controller_Action_PostDispatch_Frontend','CheckLogin');
        return true;
    }

public function CheckLogin(Enlight_Event_EventArgs $arguments)
    {
      $controller = $arguments->getSubject();
      $view = $controller->View();
      $view->assign('UserID', Shopware()->Session()->sUserId);
    }     

Im Template dann einfach mit {if $UserID}…{/if} prüfen ob der User angemeldet ist.

1 Like

Ein Hinweis dazu:

Wenn HTTP Cache aktiviert ist, wird das einfache Abfragen der UserId im Template nicht korrekt funktionieren. Hier muss ein ESI Controller implementiert werden, damit dieser vom Caching ausgenommen wird.

Hallo Zusammen,

Streift vielleicht gerade die Themen welche hier behandelt wurden.
Geht nämlich um beinahe den selben Status.

Ich darf auf der „/account/index.tpl“ einen Script ausführen, wenn der User sich erfolgreich Registriert hat.
Dafür würde ich eine Abfrage machen à la (nur für Testzwecke so geschrieben):

{block name='frontend_index_after_body'}
Here you go:
{if $Controller == "account" && $frischRegistriert}
			{literal}
				fbq('track', 'CompleteRegistration');
			{/literal}
		{/if}
{/block}

Nun habe ich zwei Fragen…

  1. Wie könnte ich auf die Session Zugreifen (z.b. $session[‚sRegister‘]) o.ä.?
  2. Wie unterscheide ich zwischen einem „angemeldeten User“ und einem „neuen User“?

Scheint mir ohne Plugin nicht möglich zu sein.

Lieber Gruss
Arya_Svitkona
 

 

Kann es sein dass die Variable auf den eigenen Inhaltsseiten nicht funktioniert.

Ich habe jetzt alles versucht. Mit Debug wird mir die Variable auch angegeben aber ich kann sie nicht aufrufen.

Foot-in-Mouth

$sUserLoggedIn

Smarty_Variable Object (3)
->value = true
->nocache = null
->scope = “snippet:frontend/custom/index.tpl|fro…”

Ich werd hier noch weich, nirgendwo eine vernünftige Doku.