v2.0.x Problem mit "checkout_shipping'/Shipping Modul

Thema wurde von Avenger, 21. Mai 2012 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
    Ich habe plötzlich das Problem, dass ich von "Shipping" nicht in "Payment" wechseln kann, weil das gewählte Shipping-Modul kein Objekt ist. (Hier geht es um das "zonese"-Modul.)

    Und die Ergebnisse des Debuggings zeigen, dass die Software recht hat...

    In der "shipping"-Klasse werden die Shipping-Klassen-Module ja initiiert mit diesem Code.

    PHP:
            for ($i 0$n sizeof($include_modules); $i $n$i++) {
              if (
    xtc_in_array(str_replace('.php'''$include_modules[$i]['file']), $unallowed_modules) != 'false') {
                
    // check if zone is alowed to see module
                
    if (constant(MODULE_SHIPPING_ strtoupper(str_replace('.php'''$include_modules[$i]['file'])) . _ALLOWED) != '') {
                  
    $unallowed_zones explode(','constant(MODULE_SHIPPING_ strtoupper(str_replace('.php'''$include_modules[$i]['file'])) . _ALLOWED));
                } else {
                  
    $unallowed_zones = array();
                }
                if (
    in_array($_SESSION['delivery_zone'], $unallowed_zones) == true || count($unallowed_zones) == 0) {
                  include(
    DIR_WS_LANGUAGES $_SESSION['language'] . '/modules/shipping/' $include_modules[$i]['file']);
                  include(
    DIR_WS_MODULES 'shipping/' $include_modules[$i]['file']);

                  
    $GLOBALS[$include_modules[$i]['class']] = new $include_modules[$i]['class'];
                }
              }
            }
    D.h., nach dieser Sequenz enthält "$GLOBALS['zonese']" das "zonese"-Objekt:

    PHP:
    $GLOBALS['zonese'
    object(zonese) = 
      
    codestring zonese
      title
    string Versicherter Versand
      description
    string Versandkosten zonenbasierend
      enabled
    bool TRUE
      num_zones
    long 10
      sort_order
    string 2
      icon
    string 
      
    tax_classstring 1
    So weit, so gut...

    In "checkout_shipping" werden die Shipping-Module in folgender Sequenz verarbeitet:

    PHP:
        if ((xtc_count_shipping_modules() > 0) || ($free_shipping == true)) {
            if ((isset (
    $_POST['shipping'])) && (strpos($_POST['shipping'], '_'))) {
                
    $_SESSION['shipping'] = $_POST['shipping'];

                list (
    $module$method) = explode('_'$_SESSION['shipping']);
                
    // BOF GM_MOD:
                
    if (is_object($$module) || $free_shipping == true) {
    Mit " list ($module, $method) = explode('_', $_SESSION['shipping']);" enthält "$module" den Text "zonese".

    Mit

    PHP:
    is_object($$module)
    wird dann geprüft, ob "$zonese" ein Objekt ist...

    Was es aber nicht ist, da es nirgendwo initiiert wurde.....

    Erst wenn ich den vorigen Code so erweitere (also "$zonese" das Objekt "$GLOBALS['zonese']" zuweise)

    PHP:
                list ($module$method) = explode('_'$_SESSION['shipping']);
                
    // BOF GM_MOD:
          //Avenger
          
    $$module=$GLOBALS[$module];
          
    //Avenger
    dann komme ich weiter in den Payment-Zweig...

    Die frage ist allerdings, warum das bisher funktioniert hat...

    u.U. hat sich da in PHP wieder etwas geändert.

    Warum das nicht funktioniert, habe ich ja beschrieben, offenbar gab es bisher einen Seiteneffekt in PHP, der das implizit gesetzt hat....
     
  2. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Hallo Avenger,

    das Problem dürfte erst auftreten, wenn man die checkout_shipping.php in einen ContentView umgewandelt hat, wie es standardmäßig noch nicht der Fall ist. Ist das bei dir der Fall? Weil $$module ist dann nicht mehr im globalen Namensraum...
     
  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, ist alles Standard.....
     
  4. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Das ist ja abgefahren! Fix habe ich jetzt mit aufgenommen.