Thankyou.php Methode init überschreiben

Guten Abend :slight_smile:

möchte gerne die Methode init() im Controller thankyou.php überschreiben

Original


public function init()
{
  parent::init();

  // get basket we might need some information from it here
  $oBasket = $this->getSession()->getBasket();
  $oBasket->setOrderId( oxSession::getVar( 'sess_challenge' ) );

  // copying basket object
  $this->_oBasket = clone $oBasket;

  // delete it from the session
  $oBasket->deleteBasket();
  oxSession::deleteVar( 'sess_challenge' );
}

Überschriebene Methode


public function init()
{
  #parent::init();

  // get basket we might need some information from it here
  $oBasket = $this->getSession()->getBasket();
  $oBasket->setOrderId( oxSession::getVar( 'sess_challenge' ) );

  // copying basket object
  $this->_oBasket = clone $oBasket;

  // delete it from the session
  #$oBasket->deleteBasket();
  #oxSession::deleteVar( 'sess_challenge' );
}

Wie Ihr seht habe ich $oBasket->deleteBasket(); und oxSession::deleteVar(‘sess_challenge’); auskommtiert. Den dies möchte ich erst nach der Methode render() ausführen. Zusätzlich habe ich die parent::init(); auskommentiert.

Problem
parent::init() sorgt dafür, dass die Methoden aus der oxUBase und oxView verfügbar sind. Beziehungsweise, dass diese Methoden überladen oder erweitert werden können. Fehlen diese führt dies zu Folge-Problemen…

Ziel
Methode init() zu überschreiben ohne, dass folgender Code ausgeführt wird:


$oBasket->deleteBasket();
oxSession::deleteVar( 'sess_challenge' );

Auf der Thankyou Seite sollen nochmal alle bestellten Artikel angezeigt werden + die Gesamtsumme.

Bisheriger Bug
Liegt im Warenkorb ein Artikel, bei welchem der Lagerbestand = 1 ist. Steht dieser auf der Thankyou Seite $oBasket->getBasket() nicht mehr zur Verfügung. Dies führt dazu, dass z.B. die zu bezahlende Gesamtsumme falsch ausgewiesen wird…

Hintergrund
Der Klone des $oBasket enthält wahrscheinlich Referenzen. Das spätere Löschen des Originals führt wahrscheinlich dazu, dass ein Artikel mit Lagerbestand = 1 aus dem Klone Basket entfernt wird und dieser auf der Thankyou Seite nicht mehr in $oBasket zur Verfügung steht.

Siehe auch http://php.net/manual/de/language.oop5.cloning.php:

“Wenn ein Objekt geklont wird, wird PHP 5 eine seichte Kopie der Eigenschaften des Objektes durchfuehren. Alle Eigenschaften, die Referenzen auf andere Variablen sind, werden Referenzen bleiben.”

Jemand eine Idee? Ratschlag?

Viele Grüße
indianer3c

Ich würde sagen das hat mit clone nichts zu tun sondern der Lagerbestand wird schon beim
Abarbeiten der Bestellung reduziert. Du solltest m.E. in thankyou die Bestellung verwenden und nicht den Warenkorb.