Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Gesamtgewicht einer Bestellung als eigene Variable in Order mail

    downset

    • Mitglied
    • Beiträge: 190
    Ist es möglich das Gesamtgewicht einer Bestellung in der Order-Mail als einzige Variable auszugeben?

    Vielen Dank für Eure Mühe

    Gruß

    Jens

    Linkback: https://www.modified-shop.org/forum/index.php?topic=41486.0

    awids

    • Experte
    • Beiträge: 3.785
    • Geschlecht:
    Ein kleiner Schuss ins Blaue (nicht updatesicher und nicht getestet):

    Erweitere deine DB-Tabelle orders wie folgt:

    Code: SQL  [Auswählen]
    ALTER TABLE `orders` ADD `orders_shipping_weight` DECIMAL(15,4) NOT NULL AFTER `shipping_class`;

    Und füge in der Datei /checkout_process.php im $sql_data_array nach

    Code: PHP  [Auswählen]
        'shipping_class' => $order->info['shipping_class'],

    noch folgendes hinzu:

    Code: PHP  [Auswählen]
        'orders_shipping_weight' => $_SESSION['cart']->weight+SHIPPING_BOX_WEIGHT,

    SHIPPING_BOX_WEIGHT ist das zusätzliche Paket-Leergewicht, welches im Shop unter Konfiguration > Versand Optionen definiert wird.

    Nun wird dir das (Gesamt-)Gewicht bei der Bestellung in die Datenbank geschrieben.

    Am Ende der Datei wird dann die send_order.php eingebunden. Ich gehe davon aus, dass wir mit dem neuen Feld schon arbeiten können, zumindest lässt das vorherige xtc_db_perform(TABLE_ORDERS, $sql_data_array) darauf schließen, dass die Datenbankeinträge schon geschrieben sind.

    Um nicht noch eine Core-Datei (class:order.php) anfassen zu müssen, versuchen wir mal den Weg "hintenrum".

    Erstelle eine Datei in /includes/extra/send_order/data/ mit folgendem Inhalt:
    Code: PHP  [Auswählen]
    <?php
    // order_mail variable for total weight
    $query = xtc_db_query("SELECT orders_shipping_weight FROM " . TABLE_ORDERS . " WHERE orders_id = '".$order->info['order_id']."'");
    $result = xtc_db_fetch_array($query);

    $smarty->assign('total_shipping_weight', round($result['orders_shipping_weight'], 2).' kg'); // Ergebnis auf 2 Stellen (ggf. anpassen) nach dem Komma aufrunden und mit kg-Angabe formatieren

    Damit kannst du es ja mal testen und die Variable {$total_shipping_weight} in der order_mail.html einbauen.

    Ansonsten müsstest du doch noch an die /includes/classes/order.php rangehen und folgendes finden:

    Code: PHP  [Auswählen]
          $this->info = array('order_status' => DEFAULT_ORDERS_STATUS_ID,
                              'currency' => $_SESSION['currency'],
                              'currency_value' => $xtPrice->currencies[$_SESSION['currency']]['value'],
                              'payment_method' => isset($_SESSION['payment']) ? $_SESSION['payment'] : '',
                              'shipping_method' => isset($_SESSION['shipping']) && is_array($_SESSION['shipping']) ? $_SESSION['shipping']['title'] : '',
                              'shipping_cost' => isset($_SESSION['shipping']) && is_array($_SESSION['shipping']) ? $xtPrice->xtcCalculateCurr($_SESSION['shipping']['cost']) : 0,
                              'comments' => isset($_SESSION['comments']) ? $_SESSION['comments'] : '',
                              'shipping_class' => isset($_SESSION['shipping']) && is_array($_SESSION['shipping']) && array_key_exists('id', $_SESSION['shipping']) ? $_SESSION['shipping']['id'] : '',
                              'payment_class' => isset($_SESSION['payment']) ? $_SESSION['payment'] : '',
                              'subtotal' => 0,
                              'tax' => 0,
                              'tax_groups' => array(),
                              );

    Füge hier nach 'shipping_class' folgendes hinzu:

    Code: PHP  [Auswählen]
                              'orders_shipping_weight' => isset($_SESSION['cart']) ? $_SESSION['cart']->weight+SHIPPING_BOX_WEIGHT : $order['orders_shipping_weight'],

    Deine Datei unter /includes/extra/send_order/data/ sieht dann nur noch so aus:

    Code: PHP  [Auswählen]
    <?php
    // order_mail variable for total weight
    $smarty->assign('total_shipping_weight', round($order->info['orders_shipping_weight'], 2).' kg'); // Ergebnis auf 2 Stellen (ggf. anpassen) nach dem Komma aufrunden und mit kg-Angabe formatieren

    Kannst ja mal berichten.

    awids

    • Experte
    • Beiträge: 3.785
    • Geschlecht:
    Hab es eben mal aus Neugierde selbst probiert:

    Es funktioniert bereits im 1. Schritt, d. h. ohne zusätzliche Anpassung der /includes/classes/order.php. Also kannst du damit arbeiten.

    LG & ein schönes Wochenende

    awids

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Über eine Datei in /includes/extra/checkout/checkout_process_end/ könnte man auch den Eintrag des Gewichtes in die DB-Tabelle orders update-sicher gestalten.

    Gruß,
    noRiddle

    awids

    • Experte
    • Beiträge: 3.785
    • Geschlecht:
    Da war ich mir bei meinen Ausführungen nicht ganz sicher, da der Hook erst am Ende der Datei eingebunden wird und die send_order.php wie auch der Cart-Reset bereits vorher durchlaufen:

    Code: PHP  [Auswählen]
      // send order mail
      include ('send_order.php');
     
      [...]
     
      // reset shopping cart
      $_SESSION['cart']->reset(true);

      [...]

      foreach(auto_include(DIR_FS_CATALOG.'includes/extra/checkout/checkout_process_end/','php') as $file) require ($file);
     

    Sicher hast du recht, hab jetzt aber keine Zeit (und noch weniger Lust  :lol: ), das gegenzuprüfen.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Jau, hast Recht.
    Dann eben in /includes/extra/checkout/checkout_process_products/ in der ersten Schleife :-D.
    Code: PHP  [Auswählen]
    if($i == 0) {
        ....
    }

    oder sogar, weil dort eigtl. $products[$i]['weight'] zur Verfügung stehen müsste, das Gewicht aller Produkte hochaddieren und in der letzten Schleife als Summe in die Tabelle orders speichern
    Code: PHP  [Auswählen]
    if($i == ($n - 1)) {
        ...
    }

    und eigentlich könnte sogar $shipping_weight (weil global gesetzt) zur Verfügung stehen, was es noch einfacher machen würde...

    Gruß,
    noRiddle

    awids

    • Experte
    • Beiträge: 3.785
    • Geschlecht:
    Ich habe mal just for fun ein order_total-Modul erstellt, welches das Gewicht mit im Totalblock in eigener Zeile ausgibt.

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Dann hat man ja bereits eine fixe Angabe in der Bestellbestätigung stehen.

    Wenn man mit diesem Wert an anderer Stelle in der Bestellbestätigung arbeiten will, kann man eine SQL-Query auf die order_total-Tabelle ausführen und sich in /includes/extra/send_order/data/ eine Smarty dafür basteln.

    So wäre das Ganze zumindest updatesicher gelöst.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Auch nicht schlecht.
    Ich baue auch gerne immer wieder mal Order-Total-Module. Problem dabei ist immer, daß die meisten Wawis damit nichts anfangen können (nicht mal JTL).

    Gruß,
    noRiddle
    0 Antworten
    561 Aufrufe
    11. Januar 2021, 16:31:55 von hbauer
    7 Antworten
    5369 Aufrufe
    06. September 2011, 14:54:24 von Litschi
    0 Antworten
    1485 Aufrufe
    13. Juni 2015, 11:16:08 von Sir
    1 Antworten
    2507 Aufrufe
    17. Mai 2011, 10:21:23 von RossiRat