Contenido
Mientras desarrollaba un módulo para OpenCart, necesitaba agregar un campo adicional a los artículos del pedido. Pero primero, debe estudiar cómo se organiza el trabajo con el pedido a través del panel de administración . Al final resultó que, el esquema no es simple y un poco confuso, pero esto es a primera vista.
Los datos sobre los productos del pedido se almacenan en una tabla order_product
donde los productos con los pedidos están vinculados por id
( order_id
, product_id
). Por cierto, la información de los pedidos se almacena en varias tablas order_
.
Interfaz
Vayamos al panel de administración de "Pedidos de venta" y seleccionemos cualquier pedido para editarlo.
La página de edición de pedidos consta de 5 pestañas , a cada una de las cuales solo se puede acceder desde la anterior (haciendo clic en el botón "Continuar" ), mientras se cambia a algunas pestañas, se producen solicitudes ajax , según las respuestas de las cuales se llena la pestaña .
Si js está deshabilitado en el navegador, la edición de pedidos no estará disponible . No puede acceder a una pestaña arbitraria.
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. :)
, .
El esquema no es del todo obvio, a primera vista puede parecer confuso. Sin embargo, tras un estudio detallado, el concepto se vuelve claro, cuya esencia es la simplicidad de la gestión de datos. No puedo decir que me guste esta solución, pero está claro que funciona bastante.