Contente
Ao desenvolver um módulo para OpenCart, precisei adicionar um campo extra aos itens do pedido. Mas primeiro, você precisa estudar como é organizado o trabalho com o pedido por meio do painel de administração . Como se viu, o esquema não é simples e um pouco confuso, mas à primeira vista.
Os dados sobre as mercadorias do pedido são armazenados em uma tabela order_product
onde as mercadorias com os pedidos estão vinculadas por id
( order_id
, product_id
). A propósito, as informações do pedido são armazenadas em várias tabelas order_
.
Interface
Vamos para o painel de administração "Pedidos de vendas" e selecione qualquer pedido para edição.
A página de edição do pedido consiste em 5 guias , cada uma das quais só pode ser acessada a partir da anterior ( clicando no botão "Continuar" ), ao alternar para algumas guias, ocorrem solicitações de ajax , com base nas respostas das quais a guia é preenchida .
Se js estiver desabilitado no navegador, a edição do pedido não estará disponível . Você não pode acessar uma guia arbitrária.
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. :)
, .
O esquema não é totalmente óbvio, à primeira vista pode parecer confuso. Porém, após um estudo detalhado, o conceito torna-se claro, cuja essência é a simplicidade do gerenciamento de dados. Não posso dizer que goste desta solução, mas é claro que funciona muito bem.