basket auf allen Seiten

Moin, moin, ich brauche den Inhalt des Warenkorbs auf allen Seiten, hat jemand einen Ansatz? - wo wird die $sBasket.Quantity befüllt -> das hilft mir schon weiter Vielen Dank

[quote=“mthrum”]Moin, moin, ich brauche den Inhalt des Warenkorbs auf allen Seiten, hat jemand einen Ansatz? - wo wird die $sBasket.Quantity befüllt -> das hilft mir schon weiter Vielen Dank[/quote] In der s_basket.php: $variables[“sBasket”] = $this->sSYSTEM->sMODULES[‘sBasket’]->sGetBasket(); Gruß

2 Likes

Hallo, da würde ich in der Funktion sCustomRenderer in der myCore.php (engine/core/class/inherit) folgende Zeile einfügen: $sRender['variables']["sBasket"] = $this-\>sSYSTEM-\>sMODULES['sBasket']-\>sGetBasket(); Damit steht die Variable in allen Viewports bereit. Wenn du allerdings nur die Menge der Artikel haben möchtest, kannst du besser statt sGetBasket, die Funktion sCountBasket nehmen. Diese gibt die Anzahl der Warenkorb-Positionen zurück.

1 Like

Wie sieht das für die 3.5er Version aus? Wie kann ich hier auf die Versandkosten, MwSt. usw. auf allen Shopseiten zugreifen? z.B. {$sShippingcosts|currency}

Grundsätzlich noch genauso - einfach mal den Frontend-Checkout Controller anschauen, da z.B. cartAction - dort wird das alles abgefragt. Auf dieser Basis ließe sihc mit Sicherheit auch ein Plugin realisieren…

Kann ich ohne Änderung z.B. auf der Startseite die Versandkosten mit {$sShippingcosts|currency} abfragen? Oder steht mir das default nur in der ceckout/cart zur Verfügung? Was dieses Smarty Snippets betrifft muß ich noch einiges lernen!

Nein - dazu müsstest du im Controller Index in der IndexAction die folgende Zeile einfügen: $this-\>View()-\>sShippingcosts = $this-\>View()-\>sBasket['sShippingcosts']; Dann ließe sich das so im Template bewerkstelligen - am besten natürlich als Hook und Plugin, aber wie das geht, wurde ja schon sehr oft beschrieben.

Komme leider mit $this-\>View()-\>sBasket = $this-\>getBasket(); $this-\>View()-\>sShippingcosts = $this-\>View()-\>sBasket['sShippingcosts']; im Index-Controller IndexAction nicht weiter, das ergibt folgende Fehlermeldung: Method “Shopware_Proxies_ShopwareControllersFrontendIndexProxy::getBasket” not found failure in Shopware/Controllers/Frontend/Index.php on line 26 Stack trace: #0 Enlight/Controller/Action.php(167): Enlight_Class->__call(‘getBasket’, Array) #1 [internal function]: Enlight_Controller_Action->__call(‘getBasket’, Array) #2 Shopware/Controllers/Frontend/Index.php(26): Shopware_Proxies_ShopwareControllersFrontendIndexProxy->getBasket() #3 Enlight/Controller/Action.php(55): Shopware_Controllers_Frontend_Index->indexAction() #4 Enlight/Controller/Dispatcher/DispatcherDefault.php(329): Enlight_Controller_Action->dispatch(‘indexAction’) #5 Enlight/Controller/Front.php(88): Enlight_Controller_Dispatcher_DispatcherDefault->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp)) #6 Shopware/Bootstrap.php(21): Enlight_Controller_Front->dispatch() #7 Enlight/Application.php(69): Shopware_Bootstrap->run() #8 shopware.php(6): Enlight_Application->run() #9 {main}

Möchte dies noch einmal hoch holen, da ich hier einfach nicht weiter komme. $this-\>View()-\>sBasket = $this-\>getBasket(); Erfordert denke ich noch die public function getBasket() Muß ich hier die Methoden des Checkout Controllers komplett in den Index Controller packen? Und gegebenenfalls in alle anderen Controller?

Ist das alles zu umfangreich? Wenn ich in den Controller index.php folgendes packe geht es auf der Startseite: [code]<?php class Shopware_Controllers_Frontend_Index extends Enlight_Controller_Action
{
protected $admin;
protected $basket;
protected $session;

public function init()
{
	$this->admin = Shopware()-\>Modules()-\>Admin(); $this-\>basket = Shopware()-\>Modules()-\>Basket(); $this-\>session = Shopware()-\>Session(); } public function preDispatch() { if($this-\>Request()-\>getActionName()!='index') { $this-\>forward('index'); } } public function indexAction() { $this-\>View()-\>loadTemplate('frontend/home/index.tpl'); $category = Shopware()-\>Shop()-\>get('parentID'); $this-\>View()-\>sCharts = Shopware()-\>Modules()-\>Articles()-\>sGetArticleCharts(); $this-\>View()-\>sCategoryContent = Shopware()-\>Modules()-\>Categories()-\>sGetCategoryContent($category); $this-\>View()-\>sOffers = Shopware()-\>Modules()-\>Articles()-\>sGetPromotions($category); $this-\>View()-\>sLiveShopping = $this-\>getLiveShopping(); $this-\>View()-\>sBanner = Shopware()-\>Modules()-\>Marketing()-\>sBanner($category); $this-\>View()-\>sBasket = $this-\>getBasket(); $this-\>View()-\>sShippingcosts = $this-\>View()-\>sBasket['sShippingcosts']; $this-\>View()-\>sBlog = $this-\>getBlog(); if($this-\>Request()-\>getPathInfo()!='/') { $this-\>Response()-\>setHttpResponseCode(404); } } public function getShippingCosts() { $country = $this-\>getSelectedCountry(); $payment = $this-\>getSelectedPayment(); if(empty($country)||empty($payment)) return array('brutto'=\>0, 'netto'=\>0); $shippingcosts = $this-\>admin-\>sGetShippingcosts($country, $payment['surcharge'], $payment['surchargestring']); return empty($shippingcosts) ? array('brutto'=\>0, 'netto'=\>0) : $shippingcosts; } public function getBasket() { $basket = $this-\>basket-\>sGetBasket(); $shippingcosts = $this-\>getShippingCosts(); $basket = $this-\>basket-\>sGetBasket(); $basket['sShippingcostsWithTax'] = $shippingcosts['brutto']; $basket['sShippingcostsNet'] = $shippingcosts['netto']; $basket['sShippingcostsTax'] = $shippingcosts['tax']; if (!empty($shippingcosts['brutto'])) { $basket['AmountNetNumeric'] += $shippingcosts['netto']; $basket['AmountNumeric'] += $shippingcosts['brutto']; $basket['sShippingcostsDifference'] = $shippingcosts['difference']['float']; } if (!empty($basket['AmountWithTaxNumeric'])) { $basket['AmountWithTaxNumeric'] += $shippingcosts['brutto']; } if ((!Shopware()-\>System()-\>sUSERGROUPDATA['tax'] && Shopware()-\>System()-\>sUSERGROUPDATA['id'])) { $basket['sTaxRates'] = $this-\>getTaxRates($basket); $basket['sShippingcosts'] = $shippingcosts['netto']; $basket['sAmount'] = round($basket['AmountNetNumeric'], 2); $basket['sAmountTax'] = round($basket['AmountWithTaxNumeric']-$basket['AmountNetNumeric'], 2); $basket['sAmountWithTax'] = round($basket['AmountWithTaxNumeric'], 2); } else { $basket['sShippingcosts'] = $shippingcosts['brutto']; $basket['sAmount'] = $basket['AmountNumeric']; $basket['sAmountTax'] = round($basket['AmountNumeric']-$basket['AmountNetNumeric'], 2); } return $basket; } public function getSelectedCountry() { if(!empty($this-\>View()-\>sUserData['additional']['countryShipping'])) { $this-\>session['sCountry'] = (int) $this-\>View()-\>sUserData['additional']['countryShipping']['id']; return $this-\>View()-\>sUserData['additional']['countryShipping']; } $countries = $this-\>getCountryList(); if(empty($countries)) { unset($this-\>session['sCountry']); return false; } $country = reset($countries); $this-\>session['sCountry'] = (int) $country['id']; $this-\>View()-\>sUserData['additional']['countryShipping'] = $country; return $country; } public function getCountryList() { return $this-\>admin-\>sGetCountryList(); } public function getPayments() { return $this-\>admin-\>sGetPaymentMeans(); } public function getSelectedPayment() { if(!empty($this-\>View()-\>sUserData['additional']['payment'])) { $payment = $this-\>View()-\>sUserData['additional']['payment']; } elseif(!empty($this-\>session['sPaymentID'])) { $payment = $this-\>admin-\>sGetPaymentMeanById($this-\>session['sPaymentID'], $this-\>View()-\>sUserData); } if (!empty($payment['table'])) { $paymentClass = $this-\>admin-\>sInitiatePaymentClass($payment); if (!empty($paymentClass)) { $payment['data'] = $paymentClass-\>getData(); } } if(!empty($payment)) { return $payment; } $payments = $this-\>getPayments(); if(empty($payments)) { unset($this-\>session['sPaymentID']); return false; } $payment = reset($payments); $this-\>session['sPaymentID'] = (int) $payment['id']; return $payment; } public function getLiveShopping() { $liveShopping = Shopware()-\>Modules()-\>Articles()-\>sGetLiveShopping('random', 0, null, true, 'AND lv.frontpage\_display=1', '', 0); if(!empty($liveShopping["liveshoppingData"][0]['articleID'])) { return $liveShopping; } return null; } public function getBlog() { $blog = null; if (!empty(Shopware()-\>Config()-\>BlogCategory)) { $category = isset(Shopware()-\>System()-\>\_GET['sCategory']) ? Shopware()-\>System()-\>\_GET['sCategory'] : null; $blog = Shopware()-\>Modules()-\>Articles()-\>sGetArticlesByCategory(Shopware()-\>Config()-\>BlogCategory, true, Shopware()-\>Config()-\>BlogLimit); Shopware()-\>System()-\>\_GET['sCategory'] = $category; } return $blog; } }[/code] Aber das ist viel Code, ist das denn wirklich in dem Ausmaß nötig?

Gibt es wirklich niemanden der dazu etwas sagen kann?

Ich habe in der myCore.php (engine/core/class/inherit) folgendes eingefügt, aber das klappte wohl nur in der alten Version, oder? $sRender['variables']["sShippingcosts"] = $this-\>sSYSTEM-\>sMODULES['sShippingcosts']-\>sGetShippingcosts();

Hey, du legst ein Plugin an mit einem Post-Dispatch - dann folgender Code für die Methode: [code] public function onPostDispatch(Enlight_Event_EventArgs $args) { $view = $args->getSubject()->View(); $request = $args->getSubject()->Request(); if(!$request->isDispatched()||$request->getModuleName()!=‘frontend’) return; // Versandkosten ermitteln $user = array(); $user = Shopware()->Modules()->Admin()->sGetUserData(); Shopware()->Modules()->Basket()->sCheckBasketBundles(); $basket = Shopware()->Modules()->Basket()->sGetBasket(); $county = Shopware()->Session()->sCountry ? Shopware()->Session()->sCountry : 2; $paymentID = Shopware()->Session()->sPaymentID ? Shopware()->Session()->sPaymentID : 5; $paymentData = Shopware()->Modules()->Admin()->sGetPaymentMeanById($paymentID, $user); if (empty($country) || empty($paymentData)){ $view->myShipping = array(‘brutto’=>0, ‘netto’=>0); }else { $view->myShipping = Shopware()->Modules()->Admin()->sGetShippingcosts($country, $paymentData[‘surcharge’], $paymentData[‘surchargestring’]) } [/code} Habe das nicht getestet, aber so müsste das vom Prinzip her auf jeden Fall funktionieren - über {$myShipping.brutto} müsstest du dann im Template auf die Versandkosten zugreifen können…

Danke für deine Hilfestellung, leider haut das bei mir nicht hin. Folgende Bootstrap.php habe ich jetzt: <?php class Shopware_Plugins_Frontend_myBasket_Bootstrap extends Shopware_Components_Plugin_Bootstrap { public function install() { $event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); return true; } public function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); $request = $args-\>getSubject()-\>Request(); if(!$request-\>isDispatched()||$request-\>getModuleName()!='frontend') return; // Versandkosten ermitteln $user = array(); $user = Shopware()-\>Modules()-\>Admin()-\>sGetUserData(); Shopware()-\>Modules()-\>Basket()-\>sCheckBasketBundles(); $basket = Shopware()-\>Modules()-\>Basket()-\>sGetBasket(); $county = Shopware()-\>Session()-\>sCountry ? Shopware()-\>Session()-\>sCountry : 2; $paymentID = Shopware()-\>Session()-\>sPaymentID ? Shopware()-\>Session()-\>sPaymentID : 5; $paymentData = Shopware()-\>Modules()-\>Admin()-\>sGetPaymentMeanById($paymentID, $user); if (empty($country) || empty($paymentData)){ $view-\>myShipping = array('brutto'=\>0, 'netto'=\>0); }else { $view-\>myShipping = Shopware()-\>Modules()-\>Admin()-\>sGetShippingcosts($country, $paymentData['surcharge'], $paymentData['surchargestring']) } } Bekomme da aber sofort Fehlermeldungen. Parse error: syntax error, unexpected $end, expecting T_FUNCTION in /www/htdocs/w005dea0/engine/Shopware/Plugins/Community/Frontend/myBasket/Bootstrap.php on line 36 Habe auch schon versucht noch eine } zu setzen, da ich dachte das bei der if else Abfrage eine fehlt, aber gleicher Fehler.

Nur mal kurz drübergeschaut - nicht getestet. Da fehlt eine Klammer ‚}‘ am Ende und ein ‚;‘ hinter einer Anweisung.

Hatte das jetzt mal so integriert: public function onPostDispatch(Enlight\_Event\_EventArgs $args) { $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $view = $args-\>getSubject()-\>View(); if(!$request-\>isDispatched()||$request-\>getModuleName()!='frontend') return; // Versandkosten ermitteln $user = array(); $user = Shopware()-\>Modules()-\>Admin()-\>sGetUserData(); Shopware()-\>Modules()-\>Basket()-\>sCheckBasketBundles(); $basket = Shopware()-\>Modules()-\>Basket()-\>sGetBasket(); $county = Shopware()-\>Session()-\>sCountry ? Shopware()-\>Session()-\>sCountry : 2; $paymentID = Shopware()-\>Session()-\>sPaymentID ? Shopware()-\>Session()-\>sPaymentID : 5; $paymentData = Shopware()-\>Modules()-\>Admin()-\>sGetPaymentMeanById($paymentID, $user); if (empty($country) || empty($paymentData)){ $view-\>myShipping = array('brutto'=\>0, 'netto'=\>0); }else{ $view-\>myShipping = Shopware()-\>Modules()-\>Admin()-\>sGetShippingcosts($country, $paymentData['surcharge'], $paymentData['surchargestring']);} } Wird nur leider nichts ausgegeben. Ich glaube ich gebe das auf. Ist mir doch zu komplex.

Probiere doch mal das Script zu debuggen - also dazu gibt es ja auch einen Artikel in den Labs - im Notfall halt mit var_dump und print_r und exit :wink: Also herausfinden, wo es im Listing hängt und welche Werte die verschiedenen Variablen haben. Insbesondere interessant ist paymentData und die Rückgabe von Shopware()->Modules()->Admin()->sGetShippingcosts - eventuell gibt die Funktion einfach nichts zurück, da für die aktuelle Konstellation (Land / Zahlungsart + eigene Regeln) keine Versandkosten ermittelt werden können?

Hallo Stefan, evtl. brauche ich das Ganze etwas einfacher. Wenn ich in den Shop gehe, ohne angemeldet zu sein, und dann etwas in den Warenkorb lege, diesen dann auch aufrufe, werden pauschal Versandkosten angegeben, bei mir bis 150€ Warenwert 5€. Diese Versandkosten möchte ich einfach auf jeder Seite auswerten, falls dann jemand eingelogged ist, ändern die sich ja automatisch.

Okay, SO geht es auf jeden Fall - gerade getestet: Neues Plugin Frontend/TestShippingDispatch. Bootstrap.php <?php class Shopware_Plugins_Frontend_TestShippingDispatch_Bootstrap extends Shopware_Components_Plugin_Bootstrap { public function install() { $event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); return true; } static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $view = $args-\>getSubject()-\>View(); if(!$request-\>isDispatched()||$request-\>getModuleName()!='frontend') return; // Versandkosten ermitteln $user = array(); $user = Shopware()-\>Modules()-\>Admin()-\>sGetUserData(); Shopware()-\>Modules()-\>Basket()-\>sCheckBasketBundles(); $basket = Shopware()-\>Modules()-\>Basket()-\>sGetBasket(); $country = Shopware()-\>Modules()-\>Admin()-\>sGetCountry(Shopware()-\>Session()-\>sCountry ? Shopware()-\>Session()-\>sCountry : 2); $paymentID = Shopware()-\>Session()-\>sPaymentID ? Shopware()-\>Session()-\>sPaymentID : 5; $paymentData = Shopware()-\>Modules()-\>Admin()-\>sGetPaymentMeanById($paymentID, $user); if (empty($country) || empty($paymentData)){ $view-\>myShipping = array('brutto'=\>0, 'netto'=\>0); }else{ $view-\>myShipping = Shopware()-\>Modules()-\>Admin()-\>sGetShippingcosts($country, $paymentData['surcharge'], $paymentData['surchargestring']); } } } Im Template via {$myShipping.brutto} bzw. {$myShipping.netto} abfragen. Dass das so „kompliziert“ ist, hängt mit der allgemeinen Komplexität des Themas Versandkosten zusammen - damit dort die korrekten Kosten ermittelt werden können, sind zum Teil sehr umfangreiche Berechnungen / Bedingungen zu prüfen - das nur zur Info!

Wenn der Kunde noch kein Land und keine Zahlungsart gewählt hat, werden die Versandkosten auf Basis von Deutschland (Land = 2) und Vorkasse (Zahlungsart = 5) berechnet - beides würde man bei einem „richtigen“ Plugin noch konfigurierbar gestalten!