Hallo Ich beschäftige mich grad mit Shopware und hab mir die Labs schon angeschaut Ich bin grad dabei dieses Plugins nachzumachen. http://wiki.shopware.de/Getting-Started … 6_866.html Jetzt will ich es erweitern und zwar will ich das diese slogans nur für Registierte User angezeigt wird Jetzt ist die Frage wo macht man die Abfrage rein in tpl datei oder in Bootstrap.php ich würde es gerne in Bootstrap.php reinmachen Wie kann man hier die Abfrage machen ob der User angemeldet ist? gruß Mattes
also in der Tpl ist es relativ einfach aber ich stimme zu in der Bootstrap wäre es performanter. Evtl klappt es mit if (empty(Shopware()-\>Modules()-\>System()-\>\_SESSION['sRegister'])) { // Kunde nicht eingeloggt }else{ // Kunde eingeloggt }
Leider geht das nicht Hier mein code [code]<?php class Shopware_Plugins_Frontend_SwagSloganOfTheDay_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public $slogans = array(
‘Nur ein toter Bug ist ein guter Bug!’,
‘Smarty is keine Schokolinse!’,
‘Ein Zend ist kein Geldstück!’
);
public function install()
{
$this->subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Index', 'onPostDispatchIndex' ); return true; } public function onPostDispatchIndex(Enlight\_Event\_EventArgs $arguments) { /\*\*@var $controller Shopware\_Controllers\_Frontend\_Index\*/ $controller = $arguments-\>getSubject(); $view = $controller-\>View(); //Add our plugin template directory to load our slogan extension. $view-\>addTemplateDir($this-\>Path() . 'Views/'); if (empty(Shopware()-\>Modules()-\>System()-\>\_SESSION['sRegister'])) { // Kunde nicht eingeloggt }else{ // Kunde eingeloggt $view-\>extendsTemplate('frontend/plugins/slogan\_of\_the\_day/index.tpl'); } $view-\>assign('slogan', $this-\>getRandomSlogan()); } private function getRandomSlogan() { //get random number between 0 and the count of our slogans $index = rand(0, count($this-\>slogans) - 1); return $this-\>slogans[$index]; } } [/code] Was hab ich falsch? [code] if (empty(Shopware()-\>Modules()-\>System()-\>\_SESSION['sRegister'])) { // Kunde nicht eingeloggt }else{ // Kunde eingeloggt $view-\>extendsTemplate('frontend/plugins/slogan\_of\_the\_day/index.tpl'); } [/code]
nix ich hab mich vertippt Shopware()-\>Modules()-\>System()-\>\_SESSION['sUserId']
so muss es sein nicht sRegister Sorry :wtf:
geht leider auch nicht hab es so geändert if (empty(Shopware()-\>Modules()-\>System()-\>\_SESSION['sUserId'])) { // Kunde nicht eingeloggt }else{ // Kunde eingeloggt $view-\>extendsTemplate('frontend/plugins/slogan\_of\_the\_day/index.tpl'); }
geht leider nicht
Vorsicht bei der Verwendung empty() Welche Version von PHP hast du ? wenn ich mich richtig daran erinnere, Für empty() soll keine Methode rein als Parameter sondern nur Variable empty( A->b()->c() ) usw. ist erst ab PHP 5.5 möglich
ich hab die PHP Version 5.3.3-7+squeeze15 wie könnte ich die Abfrage machen?
Shopware()-\>Modules()-\>System()-\>\_SESSION['sUserId']
würde ja einen String zurück geben kein Objekt mach mal var\_dump(Shopware()-\>Modules()-\>System()-\>\_SESSION); die();
und schau dir die Ausgabe an
Es wird NULL ausgegeben Ich hab es probiert auch wenn der Kunde eingelogt ist da wird dann auch NULL ausgegeben Wie kann man das lösen?
if( Shopware()-\>Modules()-\>Admin()-\>sCheckUser() ){ .... }else{ ... }
[quote=„Parker“]if( Shopware()-\>Modules()-\>Admin()-\>sCheckUser() ){ .... }else{ ... }
[/quote] in der PHPDoc zu dieser Funktion steht /\*\* \* Verification of user authorization (logged in) on all secured pages (checkout,account) \* @access public \* @return boolean \*/
geht das dann überall oder nur auf den https Seiten?
Cool Danke so gehts es aber warum wird da admin() benutzt? if( Shopware()-\>Modules()-\>Admin()-\>sCheckUser() ){ // Kunde ist eingelogt }else{ Kunde ist nicht eingelogt }
Gibt es irgendwo eine Liste wo man die ganzen funktionen nachlesen kann? So das man selber auf das kommen könnte.
ah OK und welche Methode wird empfohlen? und wie finde ich die functionen das man nach schauen kann? Wie kann ich jetzt von Kunden den Vorname und Nachname rauslesen lassen. oder die E-Mail adresse gruß Mattes
ich hab es jetzt mal selbst in ein Plugin gepackt ich war ganz Falsch unterwegs mit dem Modules() so klappt es über die Session ich persönlich mag die Admin Klasse nicht nutzen im Frontend. Shopware()-\>System()-\>\_SESSION['sUserId'];
Wenn Du allerdings die Userdaten sowieso brauchst dann nutz die Funktion von Parker . ->getUserData() sollte dir alles zurück geben was du brauchst. Shopware selbst nutzt diese Funktion an mehreren Stellen um zu checken ob der User eingeloggt ist: /\* (siehe Klasse sAdmin.php Zeile 2218) \*/ // If user is logged in if (!empty($this-\>sSYSTEM-\>\_SESSION["sUserId"])){
[quote=“kotoradeluxe”]ich hab es jetzt mal selbst in ein Plugin gepackt ich war ganz Falsch unterwegs mit dem Modules() so klappt es über die Session ich persönlich mag die Admin Klasse nicht nutzen im Frontend. Shopware()-\>System()-\>\_SESSION['sUserId'];
Wenn Du allerdings die Userdaten sowieso brauchst dann nutz die Funktion von Parker . ->getUserData() sollte dir alles zurück geben was du brauchst. Shopware selbst nutzt diese Funktion an mehreren Stellen um zu checken ob der User eingeloggt ist: /\* (siehe Klasse sAdmin.php Zeile 2218) \*/ // If user is logged in if (!empty($this-\>sSYSTEM-\>\_SESSION["sUserId"])){
[/quote] Gut zu wissen dass es Shopware()-\>System()-\>\_SESSION['sUserId'];
statt Shopware()-\>Modules()-\>System()-\>\_SESSION['sUserId'];
sein sollte. Ich habe es weiterhin in Sourcecode verglichen, und hoffe folgende Infos nützlich ist ( für mich schon … ) Shopware()->Modules()->System() liefert alte, “deprecated” sSystem zurück, wenn man sich genau in die Klasse anschaut --> es liefert natürlich NULL zurück Shopware()->System() im Vergleich dazu: es triggert 1. Enlight_Bootstrap::loadResource() 2. Das Event Enlight_Bootstrap_InitResource_System wird überwacht von Core Plugin , Shopware_Plugins_Core_System 3. Im Boostrap von Plugin Shopware_Plugins_Core_System_Bootstrap wird dann dieses Event abgefangen und verarbeitet von Methode onInitResourceSystem Dort wird ganze Session Daten gesetzt
[quote] Shopware()->Modules()->System() liefert alte, “deprecated” sSystem zurück, wenn man sich genau in die Klasse anschaut --> es liefert natürlich NULL zurück Shopware()->System() im Vergleich dazu: es triggert 1. Enlight_Bootstrap::loadResource() 2. Das Event Enlight_Bootstrap_InitResource_System wird überwacht von Core Plugin , Shopware_Plugins_Core_System 3. Im Boostrap von Plugin Shopware_Plugins_Core_System_Bootstrap wird dann dieses Event abgefangen und verarbeitet von Methode onInitResourceSystem Dort wird ganze Session Daten gesetzt [/quote] Wo haben Sie das rausgelesen?
einfach die Klassen durch gehen dazu hatte ich aber keine Zeit :thumbdown: Spitzen Arbeit Parker!
OK ich hab diese Homepage gefunden da kann man schon gut nachschauen. https://github.com/ShopwareAG/shopware-4 gibt es eine bestimmte Datei wo alle Functionen drin sind? gruß Mattes
Hey, verwendet bitte Shopware()->Session(), bzw in eurer Bootstrap.php Datei $this->Application()->Session();. In der Session werden auch die UserDaten gespeichert wenn der Benutzer eingeloggt ist. Gruß Oliver