Warenkorb aktualisieren

Hallo,

ich überschreibe für eine “Bei Linkaufruf versandkostenfrei”-Logik im Warenkorb die Methode:

	
public function _calcDeliveryCost() {

		$oDeliveryPrice = oxNew( 'oxprice' );

		if ( $this->hasFreeShipping() && $this->getShippingId() == 'oxidstandard' && $this->isFreeDeliveryCountry() && $this->isFreeShippingAllowed() ) {
			$oDeliveryPrice->setPrice( 0 );
		} else {
			$oDeliveryPrice = parent::_calcDeliveryCost();
		}
				
		return $oDeliveryPrice;

	}

Das funktioniert auch wunderbar, allerdings erst wenn sich der Warenkorb ändert.
Ich dachte ich könnte einer der folgenden Methoden den Warenkorb aktualisieren, aber nichts geschieht. Die falsche Stelle kann es aber auch nicht sein, denn auch beim 2ten oder 3ten Aufruf passiert nichts:



	public function __construct() {

		$para = oxConfig::getParameter( 'LINK' );
		
		if(!empty($para)) {
			$this->onUpdate();
			$this->_aBasketSummary = null;
			$this->getBasketSummary();
		}
		
		$return = parent::__construct();
		
		return $return;
	}


Jemand eine Idee

Hi,
vielleicht hilft es Dir weiter:
Szenario: sobald sich Kunde einloggt und festgestellt wird, dass er z.B Auslandskunde ist, werden bestimmte Artikel aus seinem WK entfernt. Realisiert mit folgendem Code (nur ein Teil des Codes!):
oxid ce 4.6.4

  1. Klasse überschreibt “order”
  2. in der Modulklasse:
  • $oBasket = $this->getSession()->getBasket();
  • foreach ( $oBasket->getBasketArticles() as $oBasketItem ) {
    $oArt=$oBasketItem->getId();
    $sKey=$oBasket->getItemKey($oArt);
    $oProduct=oxNew(‘oxarticle’);
    $oProduct->load($oArt);
    Dann wird etwas gemacht und dann z.B.:
  • $oBasket->removeItem( $sKey );
  • $oBasket->calculateBasket( true );
    ODER
  • $oBasket->onUpdate();

Damit wird der Basket neu berechnet und im Anschluss (das gehört zu calculate) werden die VK neu berechnet.

Hoffentlich kann Dich das inspirieren…
LG
Stephan

Alles bereits probiert, man lese oben:

            $this->onUpdate(); 
            $this->_aBasketSummary = null; 
            $this->getBasketSummary(); 

ok, Du könntest ja (was ziemlich vulgär ist :slight_smile: ) ein Basket-Item nochmal in den WK legen und es sofort wieder löschen, damit wird auf jeden Fall ein Update des WK gemacht und der Benutzer merkt nichts, da der WK ja eigentlich gleich bleibt …