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: Mehrere Versandkostenpositionen in einer Bestellung

    Volker Lehmann

    • Neu im Forum
    • Beiträge: 18
    • Geschlecht:
    Re: Mehrere Versandkostenpositionen in einer Bestellung
    Antwort #15 am: 18. Januar 2015, 16:59:28
    *schmunzel*
    mit FLAT ging es problemlos. Du hattest ja eine Position genannt, in der ich mich mit meiner "Obelix"-sensiblen Programmierleistung, einhaken könnte:
    Code: PHP  [Auswählen]
        function quote($method = '') {
          global $order;


          echo MODULE_SHIPPING_HINKELSTEIN_COST . ' <<<<<<<<<';


          $this->quotes = array('id' => $this->code,
                                'module' => MODULE_SHIPPING_HINKELSTEIN_TEXT_TITLE,
                                'methods' => array(array('id' => $this->code,
                                                         'title' => MODULE_SHIPPING_HINKELSTEIN_TEXT_WAY,
                                                         'cost' => MODULE_SHIPPING_HINKELSTEIN_COST)));
     

    Hab am Anfang der Funktion ein freundliches "ECHO" eingepflegt. Bekomm leider nichts zu sehen. Ach was wäre das schön wenn es ginge. Habe im Backend mal 25.00 eingetragen. Die werden auch berücksichtigt. Wenn ich MODULE_SHIPPING_HINKELSTEIN_COST durch einen Wert (z.B. 37.50) ersetze, werden trotzdem nur die 25.00 angezeigt.  :-? Vielleicht sind meine Globalen Vars garnicht global, oder sowas

    Übrigens was das rechtl. anbelangt. Bei jedem Artikel gibt es den Text "zzgl. Versandkosten" verlinkt zu den Versandkostenangaben.
    Werbung / Banner buchen

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Mehrere Versandkostenpositionen in einer Bestellung
    Antwort #16 am: 18. Januar 2015, 17:20:18
    Soweit so gut .... Jetzt schau Dir mal das gambioultra Modul an:
    http://www.modified-shop.org/forum/index.php?topic=4243.0

    Da ist in der gambioultra.php so etwas zu finden:

    Code: PHP  [Auswählen]
                    function nc_get_product_shipping_costs()
                    {
                            global $xtPrice;
                           
                            $products = $_SESSION['cart']->get_products();
                            $costs          = 0;
                            $infos          = array();
                           
                            for($i=0; $i<sizeof($products); $i++) {
                                    $result = mysql_query('
                                            SELECT
                                                    p.nc_ultra_shipping_costs AS costs,
                                                    pd.products_name                                        AS products_name
                                            FROM    
                                                    products p
                                            LEFT JOIN
                                                    products_description AS pd USING (products_id)
                                            WHERE
                                                    p.nc_ultra_shipping_costs        != 0                                                                                                                                   AND
                                                    p.products_id                                                   = "'
    . $products[$i]['id']                       .'"     AND
                                                    pd.language_id                                                  = "'
    . $_SESSION['languages_id'] .'"
                                    '
    );
                                    //echo mysql_error();
                                    if(mysql_errno() == 0)  {
                                            while(($row = mysql_fetch_array($result) )) {
                                                    $costs  += $row['costs'] * $products[$i]['quantity'];
                                                    $infos[] = array(
                                                                                                    'title' => $products[$i]['quantity'] .'x '. $row['products_name'],
                                                                                                    'price' => $xtPrice->xtcFormat($row['costs'] * $products[$i]['quantity'], true, $this->tax_class, true)
                                                                                            );
                                            }
                                    }
                            }
                            $output = array(
                                                                            'costs' => $costs,
                                                                            'infos' => $infos
                                                            );
                            return $output;
                    }
     

    So in der Richtung muss Dein Modul das auch machen ... damit bekommst du die Produkte:
    Code: PHP  [Auswählen]
    $products = $_SESSION['cart']->get_products();
    ... und kannst Deine Kosten errechnen. Wie Du die dann auch angezeigt bekommst, weiß ich noch nicht. Ich müsste mir das gambioultra Modul komplett anschauen. Ich habe aber heute leider keine Zeit mehr. Bin gleich die Tür raus.

    Volker Lehmann

    • Neu im Forum
    • Beiträge: 18
    • Geschlecht:
    Re: Mehrere Versandkostenpositionen in einer Bestellung
    Antwort #17 am: 19. Januar 2015, 15:29:35
    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Hallo Bonsai, hallo alle,

    ich habe mal diesen IF in die Funktion output() der Klassenmodules "order_total.php" eingebaut:

    Code: PHP  [Auswählen]
      function output() {
        $output_string = '';
        if (is_array($this->modules)) {
          reset($this->modules);
          while (list (, $value) = each($this->modules)) {
            $class = substr($value, 0, strrpos($value, '.'));
            if ($GLOBALS[$class]->enabled) {
              $size = sizeof($GLOBALS[$class]->output);
              for ($i = 0; $i < $size; $i ++) {
    // Mein eingebauter IF ###################################################################
                  if(substr(trim($GLOBALS[$class]->output[$i]['title']),0,9) == 'Pauschale')
                    {
                     $GLOBALS[$class]->output[$i]['title'] = 'Kumulierte Versandkosten():';
                     $GLOBALS[$class]->output[$i]['text'] = number_format(($GLOBALS['GlobVarShippingCount'] * 6.95),2) . ' EUR';
                    }

                $output_string .= '              <tr>'."\n".'                <td align="right" class="main">'.$GLOBALS[$class]->output[$i]['title'].'</td>'."\n".'                <td align="right" class="main">'.$GLOBALS[$class]->output[$i]['text'].'</td>'."\n".'              </tr>';
              }
            }
          }
        }

        return $output_string;
      }
     

    Das Bildchen zeigt 2 Artikel, die jeder für sich 6.25€ generieren. Das geschieht jetzt auch. Nur die Summe stimmt nicht. Und in der Bestätigungsmail sind alle Werte "alt" auch die Versandkosten. Wahrscheinlich stimmt es dann auch in der DB-Tabelle nicht. Welche Tabelle ist das eigentlich?

    Es müte eine zentrale Stelle geben, wo man die Versandkosten und die Summenfelder verändern kann.

    Es grüßt dich
    Volker

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Mehrere Versandkostenpositionen in einer Bestellung
    Antwort #18 am: 19. Januar 2015, 17:29:02
    schau mal in die Datei
    includes\database_tables.php

    Ich denke mal Du musst alle Deine Werte in die Tabelle hauen.

    Volker Lehmann

    • Neu im Forum
    • Beiträge: 18
    • Geschlecht:
    Re: Mehrere Versandkostenpositionen in einer Bestellung
    Antwort #19 am: 25. Januar 2015, 15:29:29
    Hallo lieber Bonsai,
    hallo liebe Community,

    ich werkel immer noch an meinem Problem rum. Hier noch einmal das gedachte Prinzip:

    Die Artikelnummer wurde von mir strukturiert und zwar wie folgt:

    Stelle 1-2 Spiegelt die Warengruppe 00-99 wider
    Stelle 3-6 Lfd. Nummer des Artikels
    Stelle 7-8 Lfd. Artikeluntergruppe

    Nun geht es darum unterschiedliche, warengruppenabhängige Versandkosten innerhalb einer Bestellung zu generieren.
    Das grundsätzliche Schema sieht dabei wie folgt aus:
    Beispiel eine Bestellung mit 8 Artikeln:

    5 verschieden Artikel der Warengruppe 80-89 generieren 3,00€ Versandkosten
    1 Artikel der Warengruppe 90 generiert 4.00€ Versandkosten
    2 Artikel der Warengruppe 91 generieren 2x 5.00€

    Insgesamt wird diese eine Bestellung mit 17,00€ Versandkosten belastet.


    Ich bin mittlerweile völlig verwirrt. OK, das mit:

    Code: PHP  [Auswählen]
        $products = $_SESSION['cart']->get_products();

    funktioniert. Ich habe damit alle Werte, die ich brauche um die Anzahl (n) der Versandkosten (n * 6.95) zu berechnen. Ich kann sie auch in der "checkout_shipping.php" anzeigen lassen. (Klick im Warenkorb auf "Zur Kasse"). Auch in der "Bestätigungsseite" ("checkout_confirmation.php") kann ich die gewünschten Daten anzeigen lassen, aber eben nur "anzeigen". Das heißt in der Bestätigungmail und, so denke ich, auch in der "Verbuchung" erscheint nur der im Adminbereich eingegebene Wert einmalig (Pauschale Versandkosten - 6.95).

    Gibt es im Bereich "checkout_shipping.php" nicht die Möglichkeit den einmal errechneten Wert Bestellungsbezogen in die Datenbank zu schreiben(wenn ja, in welche Tabelle), sodas weitere Neuberechnungen überflüssig werden ??

    Und noch zwei banale Fragen:
    1) $GLOBALS('Variable') - Gilt das nur auf Modulebene oder über alle Module ??
    2) {$Variable} stellt ein Echo-Statement dar?! Warum führt dann {$Variable * 6.95} zu einem Fehler?

    Vielen lieben Dank an euch alle
    Gruß
    Volker

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Mehrere Versandkostenpositionen in einer Bestellung
    Antwort #20 am: 26. Januar 2015, 16:36:53
    Es gibt da Tabellen. Die fangen alle mit "orders" an.

    Ich denke aber Du solltest eher mal in die Klasse Orders reinschauen ....

    includes/classes/order.php

    z.B. hier:
    Code: PHP  [Auswählen]
          // get order_total data
          $order_total_query = "SELECT title,
                                       text,
                                       class,
                                       value,
                                       sort_order
                                  FROM "
    .TABLE_ORDERS_TOTAL."
                                 WHERE orders_id='"
    .(int)$oID."'
                              ORDER BY sort_order ASC"
    ;

          $order_total = array ();
          $order_total_query = xtc_db_query($order_total_query);
          while ($order_total_values = xtc_db_fetch_array($order_total_query)) {

            $order_total[] = array ('TITLE' => $order_total_values['title'],
                                    'CLASS' => $order_total_values['class'],
                                    'VALUE' => $order_total_values['value'],
                                    'TEXT' => $order_total_values['text']
                                    );

            if ($order_total_values['class'] == 'ot_total') {
              $total = $order_total_values['value'];
            }

            if ($order_total_values['class'] == 'ot_shipping') {
              $shipping = $order_total_values['value'];
            }
          }
          return array('data'=>$order_total,
                       'total'=>$total,
                       'shipping'=>$shipping
                      );
        }
     

    Edit: habe hier noch was gefunden:
    in der admin/orders_edit.php
    Code: PHP  [Auswählen]
    // Versandkosten Anfang
    if ($action == 'shipping_edit') {

      $module = $_POST['shipping'].'.php';
      require (DIR_FS_LANGUAGES.$order->info['language'].'/modules/shipping/'.$module);
      $shipping_text = constant('MODULE_SHIPPING_'.strtoupper($_POST['shipping']).'_TEXT_TITLE');
      $shipping_class = $_POST['shipping'].'_'.$_POST['shipping'];

      $text = $xtPrice->xtcFormat($_POST['value'], true);

      //BOF - web28 - 2010-11-28 - add missing order_total_shipping_sort order
      $shipping_order = (int)(MODULE_ORDER_TOTAL_SHIPPING_SORT_ORDER);
      $sql_data_array = array ('orders_id' => (int)($_POST['oID']),
                               'title' => xtc_db_prepare_input($shipping_text),
                               'text' => $text,
                               'value' => xtc_db_prepare_input($_POST['value']),
                               'class' => 'ot_shipping',
                               'sort_order' => xtc_db_prepare_input($shipping_order));
      //BOF - web28 - 2010-11-28 - add missing order_total_shipping_sort order

      $check_shipping_query = xtc_db_query("select class from ".TABLE_ORDERS_TOTAL." where orders_id = '".(int)$_POST['oID']."' and class = 'ot_shipping'");
      if (xtc_db_num_rows($check_shipping_query)) {
        xtc_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array, 'update', 'orders_id = \''.(int)($_POST['oID']).'\' and class="ot_shipping"');
      } else {
        xtc_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array);
      }

      $sql_data_array = array ('shipping_method' => xtc_db_prepare_input($shipping_text), 'shipping_class' => xtc_db_prepare_input($shipping_class),);
      xtc_db_perform(TABLE_ORDERS, $sql_data_array, 'update', 'orders_id = \''.(int)($_POST['oID']).'\'');

      xtc_redirect(xtc_href_link(FILENAME_ORDERS_EDIT, 'edit_action=other&oID='.(int)$_POST['oID']));
    }
    // Versandkosten Ende
     

    Ich kann hier leider nur ein wenig in die Richtung schubsen ... kenne mich in dem Teil des Shops null aus.
    Meiner Meinung nach musst du die Stelle finden an der der Shop die Versandkosten in die orders_* Tabellen einträgt und an der Stelle eingreifen. Alles andere ist Murks mit unabsehbaren Folgen.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Mehrere Versandkostenpositionen in einer Bestellung
    Antwort #21 am: 26. Januar 2015, 18:23:12
    ...
    2) {$Variable} stellt ein Echo-Statement dar?! Warum führt dann {$Variable * 6.95} zu einem Fehler?
    ...
    Meinst du im Template ?, dann ist es ein Smarty-Platzhalter.
    Um da Mathematik zu benutzen bitte die Syntax bzw. Vorgehensweise beachten.

    Gruß,
    noRiddle

    Volker Lehmann

    • Neu im Forum
    • Beiträge: 18
    • Geschlecht:
    Re: Mehrere Versandkostenpositionen in einer Bestellung
    Antwort #22 am: 01. Februar 2015, 13:23:57
    Hallo zusammen,
    hallo Bonsai,
    hallo noRiddle,

    vielen herzlichen Dank, für eure Unterstützung. Ich möchte mich an dieser Stelle bei Bonsai und noRiddle entschuldigen, das ich mich jetzt erst melde, aber ich hatte die ganze Woche "Land unter".

    Es grüßt euch
    Volker