Kandungan
Saat mengembangkan modul untuk OpenCart, saya perlu menambahkan bidang ekstra ke item pesanan. Tetapi pertama-tama, Anda perlu mempelajari bagaimana pengaturan kerja dengan pesanan melalui panel admin . Ternyata, skema tersebut tidak sederhana dan sedikit membingungkan, tetapi ini sekilas.
Data tentang barang pesanan disimpan dalam tabel di order_product
mana barang dengan pesanan dihubungkan oleh id
( order_id
, product_id
). Omong-omong, informasi pesanan disimpan dalam beberapa tabel order_
.
Antarmuka
Buka panel admin "Pesanan-Penjualan" dan pilih pesanan apa pun untuk diedit.
Halaman pengeditan order terdiri dari 5 tab yang masing-masing hanya dapat diakses dari tab sebelumnya (dengan mengklik tombol "Lanjutkan" ), saat berpindah ke beberapa tab, permintaan ajax terjadi , berdasarkan respon yang diisi tab tersebut .
Jika js dinonaktifkan di browser, pengeditan pesanan tidak akan tersedia . Anda tidak bisa membuka tab sewenang-wenang.
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. :)
, .
Skema ini tidak sepenuhnya jelas, sekilas mungkin tampak membingungkan. Namun, setelah dikaji secara detail, konsepnya menjadi jelas, yang intinya adalah kesederhanaan pengelolaan data. Saya tidak dapat mengatakan bahwa saya menyukai solusi ini, tetapi jelas bahwa ini cukup berhasil.