Hallo Leute,
ich fand im Shop Backend nicht wo ich was für ein Fehler Logging einstellen konnte, dass ist das was ich schade finde diese Weiterleitung auf die Startseite ohne Errors oder Exceptions abzuspeichern das man seinen Fehler prüfen kann.
Mein Problem.
Ich binde ein eigenes Template in eine überladene basket.tpl mit include ein, klappt super. Auf die gleiche Weise mache ich das dann in einer überladenen order.tpl und da werde ich einfach auf die Startseite weitergeleitet. tmp Verzeichnis habe ich nach erneuter Aktivierung gelöscht.
Folgender Code aus meiner metadata.php
'templates' => array(
'basket.tpl' => 'mycompany/views/checkout/basket.tpl',
'basketcontents.tpl' => 'mycompany/views/checkout/inc/basketcontents.tpl',
'coupon_form.tpl' => 'mycompany/views/mycompany/coupon_form.tpl',
'order.tpl' => 'mycompany/views/checkout/order.tpl'
),
Und so versuche ich das in der order.tpl anzuzeigen.
[{if $oView->isLogged()}]
[{include file="coupon_form.tpl" editable=true}]
[{/if}]
Genau auf die selber Art und Weise funktioniert das in der basket.tpl einwandfrei, warum nicht in der order.tpl?
Danke für eure Hilfe Gruß Daniel
Ok,
konnte den Fehler selber finden, dass Problem war das in der coupon_form.tpl Methoden aus dem Basket Controller aufgerufen waren, die aber im Order Controller noch nicht vorhanden waren.
Unschön ist das ich Code Duplicate schaffen muss. Wie kann ich es erreichen das ich Methoden im eigenen basket Controller und im überladeen order Controller nutzen kann?
Und noch eine Frage habe ich, wo wird denn der eigenetliche Sale gemacht? Also in welcher Klasse und Methode werden alle Daten gespeichert von der Bestellung? Ich muss nämlich dort dann den Preis unseres Modules mit in die Tabelle order eintragen.
Wo findet denn das abspeichern der Bestellung statt?
Ich habe nun einen Controller mycompanyThankyou der von thankyou abgeleitet wird.
Da habe in der init Mehtode folgendes rein geschrieben.
public function init()
{
$this->_mycompanySession = new oxSession();
parent::init();
$this->_oBasket->setBruttoSum($this->_newTotalPrice());
}
In der Hoffnung das nun der Preis überschrieben und in der Order Tabelle gespeichert wird, aber nein dem ist nicht so. Ich finde auch keinen Ansatz im thankyou Controller wo etwas darauf hinweist das Daten gespeichert werden,
Vielen Dank für eure Hilfe Gruß Daniel
thankyou kommt ja für gewöhntlich erst nachdem du eine Bestellung erfolgreich abgegeben hast, also auch nachdem die Bestellung gespeichert und die E-Mail-Benachrichtigung verschickt wurde.
Schau mal in dem Schritt vor thankyou, wo das Absenden des Formulars hinführt.
[QUOTE=vanilla thunder;121191]thankyou kommt ja für gewöhntlich erst nachdem du eine Bestellung erfolgreich abgegeben hast, also auch nachdem die Bestellung gespeichert und die E-Mail-Benachrichtigung verschickt wurde.
Schau mal in dem Schritt vor thankyou, wo das Absenden des Formulars hinführt.[/QUOTE]
Stimmt es war die ecexute() Methode im order Controller die überschrieben bzw. erweitert werden musste. Ich fände es cool wenn in oxid shop mal so etwas wie ein Serverseitiges Event und Hook System eingebaut werden würde, da muss in vielen Fällen nicht ganze Methode überschrieben sondern hängt sich mit einem registrierten Event oder Hook da rein.
Kannst du mir noch sagen wie ich die Liefer und Rechnungsadresse auslesen kann?
Mit
$this->getUser()->getUserAddresses();
kommt nichts heraus.
Und wenn ich einen neuen Preis in der order Tabelle speichern will, muss ich da das oxorder model überschreiben? Und dann meine erweitertes model im oder Controlelr aufrufen?
So ich habe das oxorder Model erweitert, in der Tabelle oxorder ist auch ein neu eingefügtes Feld für einen Preis durch unser Modul.
Mit folgenden Code versuche ich nun einen Preis da zu speichern, jedoch ohne Erfolg.
erweitertes oxorder model
class mycompanyOrderModel extends mycompanyOrderModel_parent
{
public function finalizeOrder(oxBasket $oBasket, $oUser, $blRecalculatingOrder = false)
{
$mycompanySession = new oxSession('mycompany');
$mycompanyPrice = $mycompanySession->getVar('price');
$this->oxorder__mycompanycouponvalue = new oxField($mycompanyPrice);
return parent::finalizeOrder($oBasket, $oUser, $blRecalculatingOrder);
}
}
Und in meinem erweiterten order Controller in der Methode execute folgendes.
try {
// $oOrder = oxNew( 'oxorder' );
$oOrder = new mycompanyOrderModel();
// finalizing ordering process (validating, storing order into DB, executing payment, setting status ...)
$iSuccess = $oOrder->finalizeOrder( $oBasket, $oUser );
}
Mein Preis aus dem eigenen Modul wird jedoch nicht gespeichert, was mache ich noch falsch?
Guten Morgen,
weis keiner eine Antwort warum das so nicht funktioniert?