Guten Tag! Ich habe die includes/modules/payment/sepa.php angepasst (etwas auskommentiert, sodass keine Eingabe der IBAN-Daten und keine Bestätigung für das Fax-SEPA-Mandat notwenig ist). Wie bekomme ich diese Anpassung updatesicher (das sie nicht überschrieben wird)? Bei den Templates gibt es ja den USERMOD-Ordner, aber wie kann ich dies unter includes/ machen? Mit sepa-USERMOD.php habe ich es schon versucht, dies hat keine Wirkung gezeigt. Vielen Dank
Vielleicht hilft dir das weiter https://developers.gambio.de/tutorials.html?v=3.3.1.0&p=class-overloading
Vielen Dank! Ich habe jetzt unter GXUserComponents/overloads/payment/ die Datei PaymentOverload.inc.php angelegt. Was muss ich nun innerhalb der Datei machen, wenn ich die komplette function function pre_confirmation_check() einfach leer haben möchte, bzw. möchte dass diese nichts macht? function pre_confirmation_check() { { if($_POST['sepa_fax'] == false) $_SESSION['sepa_owner'] = $_POST['sepa_owner']; $_SESSION['sepa_bic'] = $_POST['sepa_bic']; $_SESSION['sepa_iban'] = $_POST['sepa_iban']; $_SESSION['sepa_bankname'] = $_POST['sepa_bankname']; $sepa_validation = MainFactory::create_object('SepaAccountCheck'); $sepa_result = $sepa_validation->CheckAccount($_POST['sepa_owner'], $_POST['sepa_iban'], $_POST['sepa_bic'], $_POST['sepa_bankname']); switch($sepa_result) { case 0: // payment o.k. $error = 'O.K.'; $recheckok = 'false'; break; case 1: // number & blz not ok (BLZValidation) $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_1; $recheckok = 'false'; break; case 2: // account number has no calculation method (BLZValidation) $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_2; $recheckok = 'true'; break; case 3: // No calculation method implemented (BLZValidation) $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_3; $recheckok = 'true'; break; case 4: // Number cannot be checked (BLZValidation) $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_4; $recheckok = 'true'; break; case 5: // BLZ not found (BLZValidation) $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_5; $recheckok = 'false'; // Set "true" if you have not the latest BLZ table! break; // CUSTOM ERRORS case 10: // no account holder $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_10; $recheckok = 'false'; break; case 11: // no iban $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_11; $recheckok = 'false'; break; case 12: // no iban check digits $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_12; $recheckok = 'false'; break; case 13: // incorrect iban $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_13; $recheckok = 'false'; break; case 14: // no bic $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_14; $recheckok = 'false'; break; case 15: // incorrect bic $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_15; $recheckok = 'false'; break; case 16: // no bankname $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_16; $recheckok = 'false'; break; case 128: // Internal error $error = 'Internal error, please check again to process your payment'; $recheckok = 'true'; break; default: $error = MODULE_PAYMENT_SEPA_TEXT_BANK_ERROR_4; $recheckok = 'true'; break; } if($sepa_result > 0 && $_POST['recheckok'] != 'true') { $payment_error_return = 'payment_error=' . $this->code . '&error=' . urlencode($error) . '&recheckok=' . $recheckok; xtc_redirect(xtc_href_link(FILENAME_CHECKOUT_PAYMENT, $payment_error_return, 'SSL', true, false)); } $this->sepa_owner = $sepa_validation->owner; $this->sepa_iban = $sepa_validation->iban; $this->sepa_bic = $sepa_validation->bic; $this->sepa_bankname = $sepa_validation->bankname; $this->sepa_prz = $sepa_validation->prz; $this->sepa_status = $sepa_result; $_SESSION['sepa_owner'] = $sepa_validation->owner; $_SESSION['sepa_bic'] = $sepa_validation->bic; $_SESSION['sepa_iban'] = $sepa_validation->iban; $_SESSION['sepa_bankname'] = $sepa_validation->bankname; } } Orginaldatei:
Zu aller erst muss der Ordner im overload-Ordner den gleichen Namen haben wie die Klasse die du überladen möchtest. Bei Klassen mit einem "..._ORIGIN" muss das "_ORIGIN" als Ordnername unter overload wegfallen. Also z.B.: Original Klasse lautet "sepa_ORIGIN" der Ordner unter overload lautet "sepa". In diesen Ordner "sepa" legst du eine neue Datei z.B. PaymentSepaOverload.inc.php mit folgendem Inhalt ab PHP: class PaymentSepaOverload extends PaymentSepaOverload_parent{public function pre_confirmation_check() { ...}} damit hast du z.B. die Methode pre_confirmation_check() überladen. Wenn du möchtest das die Methode "nichts" macht, dann einfach nichts in der Methode hinterlegen, da es sich bei dieser Methode ehe um eine void-Rückgabewert handelt und es einige $_SESSION-Sachen manipuliert. Genieße sowas jedoch mit Vorsicht. Man weiß nicht, wo die Methode bzw. die SESSIONS überall genutzt werden
Vielen Dank habe es nun probiert! Unter /igpshop/GXUserComponents/overloads/sepa/ eine Datei PaymentSepaOverload.inc.php mit dem Inhalt class PaymentSepaOverload extends PaymentSepaOverload_parent { public function pre_confirmation_check() { } } angelegt. Wenn ich nun im Bestellprozess bin kommt folgende Fehlermeldung: FATAL ERROR(1): "Class 'PaymentSepaOverload' not found"Information: class PaymentSepaOverload extends PaymentSepaOverload_parent { public function pre_confirmation_check() { } }<br /> <b>Fatal error</b>: Class 'PaymentSepaOverload' not found in <b>/kunden/289356_72888/rp-hosting/897122/65/shop/system/core/MainFactory.inc.php(61) : eval()'d code</b> on line <b>1</b><br /> Was mache ich falsch? Vielen Dank!!
Wenn du ein overload von Klassen anlegst, musst du diese dem System bekannt machen. Dazu musst du im Gambio Admin unter Caches die ersten zwei Einträge ausführen.
Irgendetwas hast du aber nicht befolgt Bei mir in der Testumgebung auf die schnelle getestet ohne Fehler
Den Inhalt der Zip-Datei in den overload-Ordner kopieren - caches leeren Jedoch erwähne ich es gerne noch ein mal - Genieße sowas mit Vorsicht, man weiß nicht wo überall die Methode bzw. die $_SESSIONS, die durch die Methode manipuliert werden, gebraucht werden.
VIelen Dank hat nun funktioniert. Ich weiß jetzt vermutlich an was es lag. ICh habe nur die Funktion reingemacht, ohne den PHP-Part oben :/ Aber so wie ich die Logik verstanden habe, dürfte ich doch kein Problem mit dem Overload bekommen, oder? Der Overload dürfte doch die Klasse public function pre_confirmation_check() nur im SEPA-Bereich überschreiben? Nochmal vielen Dank! LG
Das ist richtig, der Overload überschreibt nur die Methode "pre_confirmation_check()" der sepa_ORIGIN-Klasse... ABER... da die Methode nun nichts in eine bestimmte $_SESSION schreibt, fehlen dir die Informationen z.B. in der Bestellbestätigung, welche, wie ich vermute, auch an Gambio Admin weitergegeben werden. Dies war/ist mein Hinweis an dich, dass du die Art eines Overlods nicht nutzten sollst, indem du z.B. eine Methode "nichts" machen lässt. Ein Overload dient in der Regel um Methoden um weitere Informationen zu erweitern oder gewisse Informationen/Vorgänge anders zu verarbeiten, etc., jedoch nicht um nichts zu machen