Websites und Anwendungen
Den Status einer Bestellung je nach Zahlungsart in PrestaShop ändern
In PrestaShop entscheidet jedes Zahlungsmodul, welchen Status die Bestellung bei der Bestätigung erhält. Bei Nachnahme steht sie zum Beispiel auf „Warten auf Bestätigung Nachnahme“ und bei Überweisung auf „Warten auf Zahlungseingang Überweisung“. Wenn sie mit einem anderen Status eingehen soll, müssen Sie das zweite Argument des Aufrufs von validateOrder() im Zahlungsmodul ändern.
Wenn Sie nur den Namen, die Farbe oder die gesendete E-Mail ändern möchten, müssen Sie keinen Code anfassen: Bearbeiten Sie den Status unter Bestellungen > Status.
Wo der Status festgelegt wird
Er steht in der Datei controllers/front/validation.php jedes Zahlungsmoduls:
| Modul | Datei | Zugewiesener Status |
|---|---|---|
| Nachnahme | modules/ps_cashondelivery/controllers/front/validation.php |
PS_OS_COD_VALIDATION (in den 1.x-Versionen des Moduls PS_OS_PREPARATION) |
| Banküberweisung | modules/ps_wirepayment/controllers/front/validation.php |
PS_OS_BANKWIRE |
| Scheck | modules/ps_checkpayment/controllers/front/validation.php |
PS_OS_CHEQUE |
Darin sehen Sie einen Aufruf wie diesen (Nachnahme-Modul 2.x und 3.x):
$this->module->validateOrder( (int) $this->context->cart->id, (int) Configuration::getGlobalValue(Ps_Cashondelivery::CONFIG_OS_CASH_ON_DELIVERY), (float) $this->context->cart->getOrderTotal(true, Cart::BOTH), $this->module->displayName, null, [], (int) $this->context->currency->id, false, $customer->secure_key );
Das zweite Argument ist der Status. CONFIG_OS_CASH_ON_DELIVERY entspricht PS_OS_COD_VALIDATION. Damit die Bestellung zum Beispiel als „Bestellung in Bearbeitung“ eingeht, muss dieses Argument (int) Configuration::get('PS_OS_PREPARATION') lauten.
Das sind die Status, die PrestaShop mitbringt:
| Schlüssel | Status |
|---|---|
PS_OS_CHEQUE |
Warten auf Zahlungseingang Scheck |
PS_OS_PAYMENT |
Zahlung eingegangen |
PS_OS_PREPARATION |
Bestellung in Bearbeitung |
PS_OS_SHIPPING |
Versandt |
PS_OS_DELIVERED |
Zugestellt |
PS_OS_CANCELED |
Storniert |
PS_OS_REFUND |
Erstattet |
PS_OS_ERROR |
Zahlungsfehler |
PS_OS_OUTOFSTOCK_PAID (oder PS_OS_OUTOFSTOCK) |
Lieferrückstand (bezahlt) |
PS_OS_OUTOFSTOCK_UNPAID |
Lieferrückstand (nicht bezahlt) |
PS_OS_BANKWIRE |
Warten auf Zahlungseingang Überweisung |
PS_OS_WS_PAYMENT |
Remote-Zahlung eingegangen |
PS_OS_COD_VALIDATION |
Warten auf Bestätigung Nachnahme |
Beachten Sie, dass ein als bezahlt markierter Status (zum Beispiel PS_OS_PAYMENT) dazu führt, dass PrestaShop die Rechnung erzeugt und die Bestellung als bezahlt zählt. Bei Nachnahme oder Überweisung verwendet man normalerweise PS_OS_PREPARATION oder einen eigenen Status.
Wenn Sie unter Bestellungen > Status einen eigenen Status angelegt haben, verwenden Sie seine Nummer, die in der Spalte ID der Liste steht: zum Beispiel (int) 15.
Mit einem Override ändern (empfohlen)
Wenn Sie die Datei des Moduls direkt bearbeiten, geht die Änderung beim nächsten Update des Moduls verloren. Seit PrestaShop 1.7 können Sie den Controller des Moduls mit einem Override überschreiben, der außerhalb des Modulordners liegt.
Legen Sie für das Nachnahme-Modul die Datei override/modules/ps_cashondelivery/controllers/front/validation.php mit diesem Inhalt an:
<?php class Ps_CashondeliveryValidationModuleFrontControllerOverride extends Ps_CashondeliveryValidationModuleFrontController { public function postProcess() { $cart = $this->context->cart; $orderStep1 = $this->context->link->getPageLink('order', true, (int) $this->context->language->id, ['step' => 1]); if (!Validate::isLoadedObject($cart) || !$cart->id_customer || !$cart->id_address_delivery || !$cart->id_address_invoice || $cart->isVirtualCart()) { Tools::redirect($orderStep1); } $customer = new Customer($cart->id_customer); if (!Validate::isLoadedObject($customer)) { Tools::redirect($orderStep1); } $this->module->validateOrder( (int) $cart->id, (int) Configuration::get('PS_OS_PREPARATION'), // Status, mit dem die Bestellung eingeht (float) $cart->getOrderTotal(true, Cart::BOTH), $this->module->displayName, null, [], (int) $this->context->currency->id, false, $customer->secure_key ); Tools::redirect($this->context->link->getPageLink('order-confirmation', true, (int) $this->context->language->id, [ 'id_cart' => (int) $cart->id, 'id_module' => (int) $this->module->id, 'id_order' => (int) $this->module->currentOrder, 'key' => $customer->secure_key, ])); } }
Ersetzen Sie PS_OS_PREPARATION durch den Schlüssel des gewünschten Status. Danach:
- Prüfen Sie, dass unter Erweiterte Einstellungen > Leistung die Option Alle Overrides deaktivieren auf Nein steht.
- Löschen Sie die Datei
var/cache/prod/class_index.php(in PrestaShop 1.6cache/class_index.php) oder klicken Sie auf derselben Seite auf Cache leeren, damit PrestaShop den Override erkennt.
Für Überweisung oder Scheck ist das Vorgehen dasselbe: Kopieren Sie die validation.php des Moduls nach override/modules/<módulo>/controllers/front/validation.php, benennen Sie die Klasse um, indem Sie Override ans Ende anhängen, und lassen Sie sie die ursprüngliche erweitern. Ändern Sie nur den Status im Aufruf von validateOrder(). Wenn der ursprüngliche Controller private-Methoden verwendet, kopieren Sie sie ebenfalls in Ihre Klasse, denn aus dem Override lassen sie sich nicht aufrufen.
In PrestaShop 1.6
In 1.6 gibt es keine Overrides für Modul-Controller. Bearbeiten Sie direkt modules/cashondelivery/controllers/front/validation.php (oder die Datei des Zahlungsmoduls, das Sie verwenden) und ändern Sie das zweite Argument von validateOrder(), das im Nachnahme-Modul Configuration::get('PS_OS_PREPARATION') lautet. Notieren Sie die Änderung: Sie müssen sie wiederholen, wenn Sie das Modul aktualisieren.
Prüfen, ob es funktioniert
Geben Sie mit dieser Zahlungsart eine Testbestellung auf und öffnen Sie sie unter Bestellungen > Bestellungen: Im Verlauf muss der neue Status als erster Status erscheinen. Wenn weiterhin der vorherige erscheint, leeren Sie erneut den Cache aus Schritt 2.
Das könnte Ihnen auch helfen
- Mail Alerts: Benachrichtigungen über Bestellungen, Lagerbestand und Rücksendungen in PrestaShop erhalten Installieren und konfigurieren Sie das PrestaShop-Modul Mail Alerts, um bei jeder neuen Bestellung,...
- PrestaShop für den E-Mail-Versand über SMTP einrichten Sorgen Sie dafür, dass die E-Mails von PrestaShop (Bestellungen, Registrierung, Passwörter) über aut...
- PrestaShop: in älteren Oberflächen auf Spanisch umstellen Zeigt, wo sich die Sprachoptionen in älteren PrestaShop-Oberflächen befinden, und unterscheidet zwis...
- Magento 1.9 und älter für den E-Mail-Versand über SMTP einrichten Sorgen Sie dafür, dass Magento 1.x (und OpenMage) E-Mails über authentifiziertes SMTP statt über mai...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.