Travailler avec une commande via le panneau d'administration OpenCart, un regard de l'intérieur

Teneur





Lors du développement d'un module pour OpenCart, j'avais besoin d'ajouter un champ supplémentaire aux articles de la commande. Mais d'abord, vous devez étudier  comment le travail avec la commande via le panneau d'administration est organisé . En fait, le schéma n'est pas simple et un peu déroutant, mais c'est à première vue.





Les données sur les marchandises de la commande sont stockées dans une table  order_product



où les marchandises avec les commandes sont liées par  id



 ( order_id



product_id



). À propos, les informations de commande sont stockées dans plusieurs tables  order_



.





Interface

Allons dans le panneau d'administration  "Sales-Orders"  et sélectionnez n'importe quelle commande à éditer.





La page d'édition de commande se compose de 5 onglets , dont chacun n'est accessible qu'à partir du précédent (en cliquant sur le bouton "Continuer" ), en passant à certains onglets, des requêtes ajax se produisent  , en fonction des réponses dont l'onglet est rempli .





Si  js est désactivé dans le navigateur, la modification de la commande ne sera pas disponible . Vous ne pouvez pas accéder à un onglet arbitraire.





 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. :)





, .





Le schéma n'est pas tout à fait évident, à première vue, il peut sembler déroutant. Cependant, après une étude détaillée, le concept devient clair, dont l'essence est la simplicité de la gestion des données. Je ne peux pas dire que j'aime cette solution, mais il est clair qu'elle fonctionne assez bien.





Auteur: Vitaly Buturlin








All Articles