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: MODUL: Versandkostenberechnung im Warenkorb mit Zielland- und Versandartdropdown

    Koala

    • Frisch an Board
    • Beiträge: 69
    oder mach aus:
    Code: PHP  [Auswählen]
    $text = $quotes[$i]['module'];

    das hier:
    Code: PHP  [Auswählen]
    $text = $quotes[$i]['module'].' ------ ';

    Damit wir wenigstens mal sehn wo welcher Text anfängt.

    Managed Server

    0815

    • Viel Schreiber
    • Beiträge: 905
    Hi,

    Dein letzter Beitrag hat mich auf die Lösung gebracht.
    Ich verwende bei meiner Lösung nun doch die Variablen $text und $text1.

    Hier mal die gesamte Codeschnipsel aus meiner application_top.php:
    Code: PHP  [Auswählen]
    // BOF - Fishnet Services - Nicolas Gemsjaeger
    // Versandkostenberechnung im Warenkorb mit Zielland- und Versandartdropdown v.0.9 - 28.06.2013

    if (strpos($PHP_SELF, 'checkout') === false && $_SESSION['cart']->count_contents() > 0) {
    // Benötigte Dateien einbinden
            require_once(DIR_FS_INC.'xtc_get_country_list.inc.php');
            require_once(DIR_WS_CLASSES.'shipping.php');
                           
            $order->products = $_SESSION['cart']->get_products();
                           
    // Vorauswahl Versandland
    if (isset($_SESSION['cart_block']['country'])) {
            $order->delivery['country']['id'] = $_SESSION['cart_block']['country'];
            $iso_code_2 = xtc_get_countriesList($order->delivery['country']['id'], true);
            $order->delivery['country']['iso_code_2'] = $iso_code_2['countries_iso_code_2'];
            $order->delivery['zone_id'] = 0;       
            $_SESSION['delivery_zone'] = $order->delivery['country']['iso_code_2'];
    } else {
    if (!isset($_SESSION['customer_country_id']) && !isset($_SESSION['customer_zone_id'])) {
            $order->delivery['country']['id'] = SHIPPING_DEFAULT_COUNTRY;
            $iso_code_2 = xtc_get_countriesList(SHIPPING_DEFAULT_COUNTRY, true);
            $order->delivery['country']['iso_code_2'] = $iso_code_2['countries_iso_code_2'];
            $order->delivery['zone_id'] = 0;
            $_SESSION['delivery_zone'] = $order->delivery['country']['iso_code_2'];
    } else {
            $order->delivery['country']['id'] = (int)$_SESSION['customer_country_id'];
            $iso_code_2 = xtc_get_countriesList((int)$_SESSION['customer_country_id'], true);
            $order->delivery['country']['iso_code_2'] = $iso_code_2['countries_iso_code_2'];
            $order->delivery['zone_id'] = (int)$_SESSION['customer_zone_id'];
            $_SESSION['delivery_zone'] = $order->delivery['country']['iso_code_2'];
            }
    }
                           
    // Gewicht und Artikelanzahl
            $total_weight = $_SESSION['cart']->show_weight();
            $total_count = $_SESSION['cart']->count_contents();

    // Versandarten
            $shipping_modules = new shipping;
            $quotes = $shipping_modules->quote();
                           
    // Alle möglichen Versandarten auflisten
            $change_error = 1;
            for ($i = 0, $n = sizeof($quotes); $i < $n; $i ++) {
            for ($j = 0, $n2 = sizeof($quotes[$i]['methods']); $j < $n2; $j ++) {
    if (!isset($quotes[$i]['error'])) {
    if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0 || !isset($quotes[$i]['tax'])) {$quotes[$i]['tax'] = 0;}
                                                   
            unset($text);
            $text = $quotes[$i]['module'];
            $text .= ': '.$xtPrice->xtcFormat(xtc_add_tax($quotes[$i]['methods'][$j]['cost'], $quotes[$i]['tax']), true, 0, true);
            $text2 = $quotes[$i]['module'];
                                   
            $shipping[$quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id']] = array('id' => $quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id'],
            'text' => $text,
            'cost' => xtc_add_tax($quotes[$i]['methods'][$j]['cost'], $quotes[$i]['tax']),
            'tax' => $quotes[$i]['tax']);
                                                   
            $shipping_dropdown[]  = array('id' => $quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id'],
            'text' => $text2);
                                                                                                             
    if ($_SESSION['cart_block']['shipping'] == $quotes[$i]['id'].'_'.$quotes[$i]['methods'][$j]['id']) {$change_error = 0;}
                    }
            }
    }

    if($change_error == 1) {
            $cheapest = $shipping_modules->cheapest();
            $_SESSION['cart_block']['shipping'] = $cheapest['id'];
    }
                           
    // Dropdown für Länderauswahl
                    unset($_SESSION['cart_block']['COUNTRY_DROWDOWN']);
    if(count(xtc_get_countriesList()) > 1) {
                    $_SESSION['cart_block']['COUNTRY_DROWDOWN'] = xtc_get_country_list('country_dropdown', $order->delivery['country']['id'], ' onchange="this.form.submit()" style="width: 100%;"');
    }
                           
    // Dropdown für Versandart
                    unset($_SESSION['cart_block']['SHIPPING_DROWDOWN']);
    if (count($shipping_dropdown) > 1) {
                    $_SESSION['cart_block']['SHIPPING_DROWDOWN'] = xtc_draw_pull_down_menu('shipping_dropdown', $shipping_dropdown, $_SESSION['cart_block']['shipping'], ' onchange="this.form.submit()" style="width: 100%;"');
    }
                           
    // Ausgabe
                    unset($_SESSION['cart_block']['SHIPPING_INFO']);
                    $_SESSION['cart_block']['SHIPPING_INFO'] = $shipping[$_SESSION['cart_block']['shipping']]['text'].'<br />';

    // benutzte Variablen löschen
                    unset($order);
                    unset($iso_code_2);
                    unset($total_weight);
                    unset($total_count);
                    unset($shipping_modules);
                    unset($quotes);
                    unset($cheapest);
                    unset($change_error);
                    unset($shipping);
                    unset($shipping_dropdown);
    }      
    // EOF - Fishnet Services - Nicolas Gemsjaeger

    0815

    • Viel Schreiber
    • Beiträge: 905
    Hallo,

    Punkt 1) und 4) sind doch für die Konfiguration ("Mein Shop") im Backend?!

    Wenn ich nach dem Einbau den Menüpunkt /admin/configuration.php?gID=1 im Backend aufrufe, erhalte ich folgende Fehlermeldung:
    Code: PHP  [Auswählen]
    Warning: call_user_func(xtc_get_country_name) [function.call-user-func]: First argument is expected to be a valid callback in /var/www/vhosts/xxx/httpdocs/admin/includes/functions/general.php on line 1336

    Der Code aus Zeile 1336:
    Code: PHP  [Auswählen]
    return call_user_func($function, $parameter);

    Hab' ich da beim Einbau was übersehen, oder einen Fehler gemacht?

    Koala

    • Frisch an Board
    • Beiträge: 69
    der Code ist bei mir nicht in Zeile 1336,
    sondern Zeilen 1869 ff.

    Wie lautet denn der Code der kompletten function ?

    In 1) scheint der Fehler zu sein.

    Wenn man sich das mal gehighlightet anschaut:
    Code: PHP  [Auswählen]
    $sql = "INSERT INTO `configuration`
      (`configuration_id` ,`configuration_key` ,`configuration_value` ,`configuration_group_id` ,`sort_order` ,`last_modified` ,`date_added` ,`use_function` ,`set_function`)
      VALUES
      (NULL , 'SHIPPING_DEFAULT_COUNTRY', '81', '7', '1', NULL , '', 'xtc_get_country_name', 'xtc_cfg_pull_down_country_list(');"
    ;

    Die configuration_group_id ist 7,
    Dein Aufruf im Backend müßte also /admin/configuration.php?gID=7 sein.

    Außerdem ist das hier falsch:
    Code: SQL  [Auswählen]
    INSERT INTO `configuration` (`configuration_id` ,`configuration_key` ,`configuration_value` ,`configuration_group_id` ,`sort_order` ,`last_modified` ,`date_added` ,`use_function` ,`set_function`)VALUES (NULL , 'SHIPPING_DEFAULT_COUNTRY', '81', '7', '1', NULL , '', 'xtc_get_country_name', 'xtc_cfg_pull_down_country_list(');

    muß entweder so sein:
    Code: SQL  [Auswählen]
    INSERT INTO `configuration` (`configuration_id` ,`configuration_key` ,`configuration_value` ,`configuration_group_id` ,`sort_order` ,`last_modified` ,`date_added` ,`use_function` ,`set_function`)VALUES (NULL , 'SHIPPING_DEFAULT_COUNTRY', '81', '7', '1', NULL , '', 'xtc_get_country_name', 'xtc_cfg_pull_down_country_list';

    oder so:
    Code: SQL  [Auswählen]
    INSERT INTO `configuration` (`configuration_id` ,`configuration_key` ,`configuration_value` ,`configuration_group_id` ,`sort_order` ,`last_modified` ,`date_added` ,`use_function` ,`set_function`)VALUES (NULL , 'SHIPPING_DEFAULT_COUNTRY', '81', '7', '1', NULL , '', 'xtc_get_country_name[]', 'xtc_cfg_pull_down_country_list()';

    Ich vermute Variante 1.

    Also per phpmyadmin in die DB-Tabelle configuration gehn,
    den Eintrag suchen und ändern.

    ------

    Schreibst Du dann die neue Anleitung zusammen und lädst sie hoch ?

    0815

    • Viel Schreiber
    • Beiträge: 905
    Moin,

    der SQL Befehl aus der Anleitung lässt sich so wie er ist ausführen.
    Bei Deinen beiden Korrekturen/Varianten gibt phpMyAdmin einen Fehler aus.

    Code: PHP  [Auswählen]
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

    Die Konfiguration befindet sich tatsächlich unter gID=7 (ist m. E. in der Anleitung aber auch gar nichts drüber zu finden), d.h. "Versand-Optionen", allerdings habe ich dort die gleiche Fehlermeldung.

    Muss vielleicht noch etwas in der /admin/configuration.php geändert werden?

    Koala

    • Frisch an Board
    • Beiträge: 69
    ok, ich nehm alles zurück: Tutorial: Anlage neuer Konfigurationsdaten in Datenbank

    Aber auf so was muß man erst mal kommen:
    Zitat
    xtc_cfg_pull_down_country_list(
    ...
    Anmerkung: Die Funktionsnamen werden eingetragen als Rumpf, als unvollständige php-Funktion. Das System vervollständigt intern diese mit Defaultwerten.
    Anmerkung2: Alle zur Verfügung stehenden Auswahlfunktionen sind in der Biblothek

    admin/includes/general.php

    definiert. Die entspr. Funktionen beginnen mit "xtc_cfg".

    Der Fehler den Du kriegst kommt ja von xtc_get_country_name
    der in der Spalte "use_function" drin ist.

    Die Zeilennummer wundert mich aber.

    Steht das bei Dir in der general.php ab Zeile 551?:
    Code: PHP  [Auswählen]
      /**
       * xtc_get_country_name()
       *
       * @param mixed $country_id
       * @return
       */

      function xtc_get_country_name($country_id) {
        $country_query = xtc_db_query("select countries_name from ".TABLE_COUNTRIES." where countries_id = '".$country_id."'");
        if (!xtc_db_num_rows($country_query)) {
          return $country_id;
        } else {
          $country = xtc_db_fetch_array($country_query);
          return $country['countries_name'];
        }
      }

    [EDIT Tomcraft 13.01.2020: Link auf eigenes Wiki geändert, da alter Link nicht mehr verfügbar.]

    0815

    • Viel Schreiber
    • Beiträge: 905
    Also ist der SQL-Code aus der Anleitung so wie angegeben i.O.?

    Demnach wäre der Haken an anderer Stelle zu suchen.

    Koala

    • Frisch an Board
    • Beiträge: 69
    ja, der ist ok.

    Hab meinen Beitrag noch mal editiert, schau mal.

    0815

    • Viel Schreiber
    • Beiträge: 905
    Ah, ok.

    Fehler gefunden! Bei mir war der Code an einer anderen Stelle und auskommentiert.
    Ich hab' das nun mal mit einer aktuellen general.php abgeglichen.

    Jetzt funktioniert alles. 
    Vielen Dank :thumbs:

    Koala

    • Frisch an Board
    • Beiträge: 69
    Du machst mich fertig ...

    0815

    • Viel Schreiber
    • Beiträge: 905
    Ja, ich weiß .... tut mir leid.

    Mir war nicht bewußt, dass meine general.php so veraltet ist.
    Der Shop ist mittlerweile so stark modifiziert, dass man updates nicht mehr so einfach mitnehmen kann.
    Es hat eben alles seine Vor- und Nachteile.

    Vielen Dank für Deine Mühe.

    fishnet

    • Fördermitglied
    • Beiträge: 4.821
    • Geschlecht:
     :popcorn: und ich hatte mich schon gewundert beim Lesen...

    fishnet

    • Fördermitglied
    • Beiträge: 4.821
    • Geschlecht:
    Wenn bis Ende nächster Woche niemand mehr Bugs findet, würden wir dann den Beta Status entfernen.   :-B
    Vielleicht finden sich ja noch Finanziers für die Postleitzahlengeschichte (PM genügt).
     Unsere Kunden haben alle kein PLZ-Modul  :-PP

    ChristianB

    • Fördermitglied
    • Beiträge: 56
    ...ehm ist das mit den Downloads schon mit berücksichtigt? Oder werden dafür noch Spender gesucht?  :mhhh:

    Marcel G.

    • Fördermitglied
    • Beiträge: 398
    Habe es gerade das erste Mal eingebaut und funktioniert Problemlos. Ist aber auch ein Standardfall - nur 2 verschiedene Versandkosten und nur in DE.

    Also in 1.06 r4642 keine Probleme.
    Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware
    2 Antworten
    3424 Aufrufe
    18. Juli 2011, 14:06:44 von treets
    2 Antworten
    2690 Aufrufe
    02. November 2010, 20:19:33 von Tomcraft
    0 Antworten
    1472 Aufrufe
    06. Oktober 2015, 15:31:41 von gonzo88
    4 Antworten
    2168 Aufrufe
    12. August 2016, 10:11:57 von Bonsai