Trabajando con un pedido a través del panel de administración de OpenCart, una mirada desde el interior

Contenido





  • Interfaz





  • Cambios en el pedido





  • Guardando cambios de orden





  • Salir





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



   .





,  ajax OpenCart    API OpenCart.





- ( 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.





Autor: Vitaly Buturlin








All Articles