Inhalt
Bei der Entwicklung eines Moduls für OpenCart musste ich den Bestellpositionen ein zusätzliches Feld hinzufügen. Aber zuerst müssen Sie untersuchen, wie die Arbeit mit der Bestellung über das Admin-Panel angeordnet ist . Wie sich herausstellte, ist das Schema nicht einfach und etwas verwirrend, aber dies ist auf den ersten Blick.
Die Daten über die Waren der Bestellung werden in einer Tabelle gespeichert, in der order_product
die Waren mit den Bestellungen durch id
( order_id
, product_id
) verknüpft sind . Bestellinformationen werden übrigens in mehreren Tabellen gespeichert order_
.
Schnittstelle
Gehen wir zum Admin -Bereich " Kundenaufträge " und wählen Sie einen beliebigen Auftrag zum Bearbeiten aus.
Die Seite zur Auftragsbearbeitung besteht aus 5 Registerkarten , auf die jeweils nur über die vorherige Registerkarte zugegriffen werden kann (durch Klicken auf die Schaltfläche "Weiter" ). Beim Umschalten auf einige Registerkarten treten Ajax-Anforderungen auf , basierend auf den Antworten, mit denen die Registerkarte gefüllt ist .
Wenn js im Browser deaktiviert ist, ist die Auftragsbearbeitung nicht verfügbar . Sie können nicht zu einer beliebigen Registerkarte gelangen.
admin/view/teplate/sale/order_form.tpl
(OpenCart 2.3). , "" ( #button-customer
#button-refresh
) ajax , .
javascript.
"".
ajax route=api/cart/add
. catalog/controller/api/cart.php
add
$this->cart
Cart
(), add
. , cart
, order_
.
cart
session_id
, , $_SESSION
. cart
.
- (
cart
), (order_
)
"", "".
route=api/order/edit
. catalog/controller/api/order.php
edit
, order_data
($this->cart->getProducts()
).
, :
// Products
$order_data['products'] = array();
foreach ($this->cart->getProducts() as $product) {
$option_data = array();
//...
$order_data['products'][] = array(
'product_id' => $product['product_id'],
'name' => $product['name'],
'model' => $product['model'],
'option' => $option_data,
'download' => $product['download'],
'quantity' => $product['quantity'],
'subtract' => $product['subtract'],
'price' => $product['price'],
'total' => $product['total'],
'tax' => $this->tax->getTax($product['price'], $product['tax_class_id']),
'reward' => $product['reward']
);
}
checkout/order
order_product
:
$this->model_checkout_order->editOrder($order_id, $order_data);
:
$this->model_checkout_order->addOrderHistory($order_id, $order_status_id);
... :)
order_product
:
cart
:
, (cart
), (order
)? . !
, api/order/edit
:
token
order_id
checkout/order
editOrder
:
$this->db->query("DELETE FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "'");
:
: .
, , , .
, OpenCart eCommerce BuiltWith. :)
, .
Das Schema ist nicht ganz offensichtlich, auf den ersten Blick mag es verwirrend erscheinen. Bei eingehender Untersuchung wird das Konzept jedoch klar, dessen Kern die Einfachheit des Datenmanagements ist. Ich kann nicht sagen, dass mir diese Lösung gefällt, aber es ist klar, dass sie ziemlich gut funktioniert.