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) = code: string = zonese title: string = Versicherter Versand description: string = Versandkosten zonenbasierend enabled: bool = TRUE num_zones: long = 10 sort_order: string = 2 icon: string = tax_class: string = 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....
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...