Modul Übernahme der im Warenkorb gewählten Versandart in den Checkout

Thema wurde von Avenger, 12. Juli 2014 erstellt.

  1. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Ein unschöner Effekt ist bisher, dass der Besucher zwar im Warenkorb eine Versandart wählen kann, um die Versandkosten zu berechnen, die gewählte Versandart aber im "Checkout" dann nicht vorbelegt ist.

    Das folgende Modul sorgt dafür, dass diese übernommen wird.

    Als "user_classes\overloads\ApplicationTopExtenderComponent\pt_shipping_ApplicationTopExtender.inc.php" speichern. (Evtl. vorhandene Leerzeichen entfernen!)

    PHP:
    <?php
    /* --------------------------------------------------------------
    pt_shipping_ApplicationTopExtender.inc.php 2014-07-12 Avenger

    Copyright (c) 2014 Avenger, entwiclung@powertemplate.de
    Build "shipping" info based on shipping selection in cart!

    Store as: user_classes\overloads\ApplicationTopExtenderComponent\pt_shipping_ApplicationTopExtender.inc.php

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

    class pt_shipping_ApplicationTopExtender extends pt_shipping_ApplicationTopExtender_parent
    {
      function 
    proceed()
      {
        
    parent::proceed();
        
    $php_self=basename($_SERVER['PHP_SELF']);
        if (
    strpos($php_self,FILENAME_CHECKOUT_SHIPPING)!==false || strpos($php_self,'checkout.php')!==false)
        {
          if (isset(
    $_SESSION['cart_shipping_module']) && isset($_SESSION['cart_shipping_method']))
          {
            
    $quote=array();
            
    $module=$_SESSION['cart_shipping_module'];
            
    $method=$_SESSION['cart_shipping_method'];
            
    $shipping=$module.'_'.$method;
            
    $_SESSION['shipping']=$shipping;
            if (
    $shipping=='free_free')
            {
              
    $title FREE_SHIPPING_TITLE;
              
    $cost 0;
            }
            else
            {
              global 
    $order,$total_weight$shipping_weight$shipping_quoted$shipping_num_boxes;

              
    $shipping_modules=new shipping(array('id'=>$shipping));
              if (
    is_object($shipping_modules))
              {
                
    $total_weight=$_SESSION['cart']->show_weight();
                
    $quote $shipping_modules->quote($method$module);
                
    $quote=$quote[0]['methods'][0];
                
    $title=$quote['module'].' ('.$quote['title'].')';
                
    $cost=$quote['cost'];
              }
            }
            if (
    count($quote)>0)
            {
              if (isset(
    $title) && isset($cost))
              {
                
    $_SESSION['shipping'] = array (
                  
    'id' => $shipping,
                  
    'title' => $title,
                  
    'cost' => $cost
                
    );
              }
            }
          }
        }
      }
    }
    ?>
    Wie immer gilt:

    • Anwendung auf das ausschließliche Risiko des Shopbetreibers.
    • Es gibt keinerlei Gewährleistung.
    • Erst in einem Testshop testen.
    • Cache leeren.
     
  2. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Besser wäre es natürlich, wenn das in den Gambio-Modulen, in denen die Versandkosten berechnet werden gleich gesetzt würde, da spart man sich das Modul, das alles noch mal neu berechnen muss.....

    In "system\overloads\CartShippingCostsControl.inc.php" nach:

    PHP:
            $_SESSION['preliminary_shipping_costs'] = array(
                
    'module' => $p_shipping_module,
                
    'method' => $p_shipping_method,
                
    'costs' => $t_shipping_costs,
                
    'formatted_costs' => $t_formatted_shipping_costs,
            )
    einfügen

    PHP:
       //Avenger
        
    $_SESSION['shipping'] = array (
          
    'id' => $p_shipping_module.'_'.$p_shipping_method,
          
    'title' => $t_shipping_module[0]['module'].' ('.$t_shipping_module[0]['methods'][0]['title'].')',
          
    'cost' => $t_shipping_costs
        
    );
        
    //Avenger
    Dann ist alles da, was der Shop weiter braucht für die Verwendung der ausgewählten Versandkosten...
     
  3. Hector

    Hector Erfahrener Benutzer

    Registriert seit:
    9. Januar 2013
    Beiträge:
    185
    Danke erhalten:
    35
    Danke vergeben:
    46
    Hallo Avenger,

    klasse! Vielen Dank, dass hat mich schon die ganze Zeit gestört.


    Diese Datei habe ich jedoch gar nicht: :confused:
    Habe 2.0.15.1
    Liegt es evtl. daran?

    Danke,
    Marcus
     
  4. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Ich habe mit 2.0.15.4 emtwickelt, keine Ahnung ob das in 15.1 so organisisiert ist...

    Aber wenn Du die Modul-Lösung nimmst, brauchts Du das eh' nicht.

    War nur eine kleine Aufforderung an Gambio, das mal so zu lösen.
     
  5. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Guten Morgen Avenger,
    ich habe die erste Methode verwendet. Bei mir wird zwar der Radio-Button richtig gesetzt, aber kommt folgende Fehler-Meldung:-
    Ich habe die Version 15.4
     
  6. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Bei der zweite Methode, habe ich die folgende Datei überhaupt nicht um zu ändern!
     
  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
    Versuche mal diese Version:

    PHP:
    <?php
    /* --------------------------------------------------------------
    pt_shipping_ApplicationTopExtender.inc.php 2012-04-11 Avenger

    Copyright (c) 2014 Avenger, entwiclung@powertemplate.de
    Build "shipping" info based on shipping selection in cart!

    Store as: user_classes\overloads\ApplicationTopExtenderComponent\pt_shipping_ApplicationTopExtender.inc.php

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

    class pt_shipping_ApplicationTopExtender extends pt_shipping_ApplicationTopExtender_parent
    {
      function 
    proceed()
      {
        
    parent::proceed();
        
    $php_self=basename($_SERVER['PHP_SELF']);
        if (
    strpos($php_self,FILENAME_CHECKOUT_SHIPPING)!==false || strpos($php_self,'checkout.php')!==false)
        {
          if (isset(
    $_SESSION['cart_shipping_module']) && isset($_SESSION['cart_shipping_method']))
          {
            
    $quote=array();
            
    $module=$_SESSION['cart_shipping_module'];
            
    $method=$_SESSION['cart_shipping_method'];
            
    $shipping=$module.'_'.$method;
            
    $_SESSION['shipping']=$shipping;
            if (
    $shipping=='free_free')
            {
              
    $title FREE_SHIPPING_TITLE;
              
    $cost 0;
            }
            else
            {
              global 
    $order,$total_weight$shipping_weight$shipping_quoted$shipping_num_boxes;

              
    $shipping_modules=new shipping(array('id'=>$shipping));
              if (
    is_object($shipping_modules))
              {
                
    $total_weight=$_SESSION['cart']->show_weight();
                
    $quote $shipping_modules->quote($method$module);
                
    $quote=$quote[0]['methods'][0];
                
    $title=$quote['module'].' ('.$quote['title'].')';
                
    $cost=$quote['cost'];
              }
            }
            if (isset(
    $title) && isset($cost))
            {
              
    $_SESSION['shipping'] = array (
                
    'id' => $shipping,
                
    'title' => $title,
                
    'cost' => $cost
              
    );
            }
          }
        }
      }
    }
    ?>
     
  8. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Merkwürdig, die gibt es standardmäßig tatsächlich nicht, weiss der Geier, wo die bei mir her kommt....

    Gut, dann machen wir das in der "system/controls/CartShippingCostsControl.inc.php":

    Vor
    PHP:
            $t_formatted_shipping_costs $this->v_coo_xtc_price->xtcFormat($t_shipping_coststrue0true);
    einfügen

    PHP:
        //Avenger
        
    $_SESSION['shipping'] = $t_shipping_module[0]['methods'][0];
        
    //Avenger
    Das ist aber nicht updatesicher, und nur als kleiner "Wink" an Gambio gedacht, das doch bitte in ein SP einfließen zu lassen.
     
  9. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Hallo Avenger,
    Dies mal habe ich ein anderes Problem. Es markiert zwar eine von Versandarten, aber nicht die ausgewählte Versandart der Versandkostenberechnung??
     
  10. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Kann es daran liegen, dass ich ein Paar Versandmodule extra habe, die von Gambio entwickelt worden sind?
     
  11. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Hallo,

    system/overloads/CartShippingCostsControl.inc.php kann z.B. durch PayPal2 ins System kommen und dient dann überhaupt nur dazu, $_SESSION['preliminary_shipping_costs'] zu setzen, damit die Warenkorb-Versandkosten an PayPal übertragen werden können, wenn man den vorgelagerten PayPal-Login benutzt. In GX2.1 wandert das dann ins normale CartShippingCostsControl.
     
  12. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.475
    Danke erhalten:
    11.263
    Danke vergeben:
    1.607
    Ich habe die Datei auch. Die kam mit dem PayPalng - Modul

    Oh man, war ich jetzt langsam :)
     
  13. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Eigentlich nicht, weil die ja sicher auch die gleichen Methoden wie die anderen haben.
     
  14. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    hallo Avenger,
    Sorry, mein Fehler. Dein Code funktioniert wunderbar. Bloss ich habe in einem test Shop eine Versandsperre, die über Produkte eingestellt wird. Das nehme ich an war der Grund warum es bei diesem Test-Shop nicht funktioniert hat!
     
  15. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    Hallo Avenger,
    Der Code funktioniert wunderbar. Allerdings ein Defizit hat er noch. Wenn man aus einem oder anderem Grund den Checkout-Prozess unterbricht oder Zurück-Button anklickt, die zuerst ausgewählte Versandart bleibt immernoch als markiert, sogar wenn man bei der Versandkostenberechnung dies Mal eine andere Versandart auswählt.
     
  16. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Bei näherer Betrachtung stelle ich fest, dass das Ganze ziemlich unausgegoren ist.

    Es gibt keinerlei Verbindung zwischen den Versand-Informationen im Cart und dem Checkout, was die Versandart betriftt.

    Beide berechnen ihre Versand-Info aus jeweils eigenen SESSION-Daten, deshalb ändert sich das nicht, wenn man im Cart oder im Checkout eine andere Versandarten wählt, und zwischen Cart und Checkout wechselt.

    Ich habe das jetzt grundlegend durch ein Overload-Modul gelöst, das die Cart-Info und die Checkout Infos verbindet.

    Jetzt beeinflussen sich die Auswahlen im Cart und im Checkout....

    Das vorherige Modul für diesen Zweck löschen.

    Den Inhalt des Archivs im Anhang in die Shop-Root kopieren.

    Wie immer gilt:

    • Anwendung auf das ausschließliche Risiko des Shopbetreibers.
    • Es gibt keinerlei Gewährleistung.
    • Erst in einem Testshop testen.
    • Cache leeren.
     

    Anhänge:

  17. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.434
    Danke erhalten:
    342
    Danke vergeben:
    176
    #17 Cyrus (LeGong), 17. Juli 2014
    Zuletzt bearbeitet: 17. Juli 2014
    Hallo Avenger,
    Es ist einfach Toll, dass du dich um einige Defizite vom Gambio kümmerst. Das Modul habe ich soeben ausprobiert. Es funktioniert Super. das Beste daran ist seine Updatessicherheit.
    Vielen Dank nochmals. Eine Kleinigkeit ist auf den Weg zu dir