Gesucht wird: Gesamtgewicht einer Bestellung!

Thema wurde von Manni_HB, 14. September 2011 erstellt.

  1. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Wird das Gesamtgewicht einer Bestellung in der Datenbank gespeichert? Ich finde ums Verr... nix! :(
    Wäre für den Export zu IntraShip von großem Nutzen.
     
  2. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Hm, export zu Intraship.... erzähl mal ;-)
     
  3. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Nein, wird nicht gespeichert...

    Aber Du kannst ja die bestellten Artikel auslesen und aus dem Artikelstammsatz dann das Gewicht ermitteln...
     
  4. chris801255

    chris801255 Erfahrener Benutzer

    Registriert seit:
    26. Mai 2011
    Beiträge:
    272
    Danke erhalten:
    15
    Danke vergeben:
    116
    Hallo,

    wir benötigen auch das Gesamtgewicht der Bestellung. Habt ihr das schon igerndwie hinbekommen oder gibt es einen anderen Trick?
     
  5. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
  6. chris801255

    chris801255 Erfahrener Benutzer

    Registriert seit:
    26. Mai 2011
    Beiträge:
    272
    Danke erhalten:
    15
    Danke vergeben:
    116
    Das Gesamtgewicht der Bestellung soll in der SQL Tabelle stehen. Wir haben uns das OscWare Modul für Adressenexport von Gambio an Intraship gekauft. Jetzt wird aber kein Gewicht übernommen, da es allem Anschein nach ja auch nirgends gespeichert wird :/
     
  7. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das ist nicht vorhanden, mit der Klassenüberladung kann man so etwas aber recht einfach und updatesicher lösen....

    Folgenden SQL-Befehl auf die DB anwenden:

    PHP:
    ALTER TABLE `ordersADD `orders_weightFLOAT11.4 NOT NULL DEFAULT '0';
    (`orders_weight` muss evtl. ein anderer Name werden, den Oscware braucht.)

    Folgenden Code als "user_classes\overloads\order\pt_weight_order.php" speichern:

    PHP:
    <?php
    /* -----------------------------------------------------------------------------------------
    $Id: pt_weight_order.php, 2013/01/18 Avenger $

    Copyright (c) 2013 Avenger, entwicklung@powertemplate.de 

    Subclass "order" class, in order to add weight to order data,

    -----------------------------------------------------------------------------------------*/

    class pt_weight_order extends pt_weight_order_parent 
    {
      function 
    __construct($order_id '')
      {
        
    parent::__construct($order_id);
        if (
    $order_id)
        {
          
    $cart=$_SESSION['cart'];
          if (
    sizeof($cart->contents)>0)
          {
            
    //If cart available, then check if the order has already a weight set.
            
    $sql="
            SELECT
              orders_weight
            FROM
              "
    .TABLE_ORDERS."
            WHERE
              orders_id="
    .$order_id;
            
    $res=xtc_db_query($sql);
            
    $res=xtc_db_fetch_array($res);
            
    $weight=$res['orders_weight'];
            if (!
    $weight)
            {
              
    $weight=$cart->show_weight();
              
    $sql="
              UPDATE
                "
    .TABLE_ORDERS."
              SET
                orders_weight="
    .$weight."
              WHERE
                orders_id="
    .$order_id;
              
    $res=xtc_db_query($sql);
            }
          }
        }
      }
    }
    ?>
    Was dieser Code macht, ist, dass er beim Öffnen einer gespeicherten "order" ($order_id <>'') und einem vorhandenen Warenkorb, das Warenkorbgewicht in der "order" speichert.

    Und da in der "send_order.php" die gespeicherte Order wieder aktiviert wird, können wir uns da einklinken...


    Cache löschen nicht vergessen!
     
  8. chris801255

    chris801255 Erfahrener Benutzer

    Registriert seit:
    26. Mai 2011
    Beiträge:
    272
    Danke erhalten:
    15
    Danke vergeben:
    116
    Ja, scheint wunderbar zu funktionieren, vielen Dank!
     
  9. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Eine kleine Verbesserung noch:

    Da die "orders"-Klasse auch an anderen Stellen mit gesetztem "$orders_id" aufgerufen wird, wird die Behandlung auf den Fall begrenzt, dass sie im Kontext des "checkout_process.php"-Programms aufgerufen wird.

    Das geschieht mit

    PHP:
    if (basename($_SERVER['PHP_SELF'])==FILENAME_CHECKOUT_PROCESS)
    PHP:
    <?php
    /* -----------------------------------------------------------------------------------------
    $Id: pt_weight_order.php, 2013/01/18 Avenger $

    Copyright (c) 2013 Avenger, entwicklung@powertemplate.de 

    Subclass "order" class, in order to add weight to order data,

    -----------------------------------------------------------------------------------------*/

    class pt_weight_order extends pt_weight_order_parent 
    {
      function 
    __construct($order_id '')
      {
        
    parent::__construct($order_id);
        if (
    $order_id)
        {
          if (
    basename($_SERVER['PHP_SELF'])==FILENAME_CHECKOUT_PROCESS)
          {
            
    $cart=$_SESSION['cart'];
            if (
    sizeof($cart->contents)>0)
            {
              
    //If cart available, then check if the order has already a weight set.
              
    $sql="
              SELECT
                orders_weight
              FROM
                "
    .TABLE_ORDERS."
              WHERE
                orders_id="
    .$order_id;
              
    $res=xtc_db_query($sql);
              
    $res=xtc_db_fetch_array($res);
              
    $weight=$res['orders_weight'];
              if (!
    $weight)
              {
                
    $weight=$cart->show_weight();
                
    $sql="
                UPDATE
                  "
    .TABLE_ORDERS."
                SET
                  orders_weight="
    .$weight."
                WHERE
                  orders_id="
    .$order_id;
                
    $res=xtc_db_query($sql);
              }
            }
          }
        }
      }
    }
    ?>
     
  10. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    #10 HolgerNils (xycons.de), 20. Januar 2013
    Zuletzt bearbeitet: 20. Januar 2013
    Hi Avenger, ich hab die Erweiterung soeben rausschmeissen müssen.
    Kein Kunde kam mehr am Button "KASSE" vorbei, kam nur noch eine weisse Seite.
    Ich werde das mal im Testshop probieren und berichten.

    Edit:
    So, meine Dusseligkeit! War ja auch abzusehen.
    Ich warne davor die Datei versehentlich nur "weight_order.php" zu nennen...
    Des funzt nicht...
     
  11. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Da jetzt ja dieser Code nur noch in der orders_process.php ausgeführt wird, kann man sich das erste einlesen des "orders_weight" sparen....


    PHP:
     <?php
    /* -----------------------------------------------------------------------------------------
    $Id: pt_weight_order.php, 2013/01/21 Avenger $

    Copyright (c) 2013 Avenger, entwicklung@powertemplate.de 

    Subclass "order" class, in order to add weight to order data,

    -----------------------------------------------------------------------------------------*/

    class pt_weight_order extends pt_weight_order_parent 
    {
      function 
    __construct($order_id '')
      {
        
    parent::__construct($order_id);
        if (
    $order_id)
        {
          if (
    basename($_SERVER['PHP_SELF'])==FILENAME_CHECKOUT_PROCESS)
          {
            
    $cart=$_SESSION['cart'];
            if (
    sizeof($cart->contents)>0)
            {
              
    $weight=$cart->show_weight();
              
    $sql="
              UPDATE
                "
    .TABLE_ORDERS."
              SET
                orders_weight="
    .$weight."
              WHERE
                orders_id="
    .$order_id;
              
    $res=xtc_db_query($sql);
            }
          }
        }
      }
    }
    ?> 
    Das ist natürlich auch ein guter Platz, um updatesicher auch weitere Daten in die Bestellung einzuschleußen....
     
  12. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Der Name sollte eigentlich keine Rolle spielen....

    Evtl. Cache nicht geleert?