Arbeiten mit einer Bestellung über das OpenCart-Administrationsfenster, ein Blick von innen

Inhalt





  • Schnittstelle





  • Änderungen an der Bestellung





  • Auftragsänderungen speichern





  • Ergebnis





Bei der Entwicklung eines Moduls für OpenCart musste ich den Bestellpositionen ein zusätzliches Feld hinzufügen. Aber zuerst müssen Sie untersuchen,  wie die Arbeit mit der Bestellung über das Admin-Panel angeordnet ist . Wie sich herausstellte, ist das Schema nicht einfach und etwas verwirrend, aber dies ist auf den ersten Blick.





Die Daten über die Waren der Bestellung werden in einer Tabelle gespeichert, in der  order_product



die Waren mit den Bestellungen durch id



 ( order_id



product_id



) verknüpft sind  . Bestellinformationen werden übrigens in mehreren Tabellen gespeichert  order_



.





Schnittstelle

Gehen wir zum Admin -Bereich " Kundenaufträge  "  und wählen Sie einen beliebigen Auftrag zum Bearbeiten aus.





Die Seite zur Auftragsbearbeitung besteht aus 5 Registerkarten , auf die jeweils nur über die vorherige Registerkarte zugegriffen werden kann (durch Klicken auf die Schaltfläche "Weiter" ). Beim Umschalten auf einige Registerkarten treten Ajax-Anforderungen auf  , basierend auf den Antworten, mit denen die Registerkarte gefüllt ist .





Wenn  js im Browser deaktiviert ist, ist die Auftragsbearbeitung nicht verfügbar . Sie können nicht zu einer beliebigen Registerkarte gelangen.





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





, .





Das Schema ist nicht ganz offensichtlich, auf den ersten Blick mag es verwirrend erscheinen. Bei eingehender Untersuchung wird das Konzept jedoch klar, dessen Kern die Einfachheit des Datenmanagements ist. Ich kann nicht sagen, dass mir diese Lösung gefällt, aber es ist klar, dass sie ziemlich gut funktioniert.





Verfasser: Vitaly Buturlin








All Articles