Ich möchte über das Registrierungsformular eine individuelle Kundennummer speichern können. Damit das Update-Sicher passiert, habe ich folgende Anleitung zu Rate gezogen: https://developers.gambio.de/tutorials.html?v=3.0.0.0&p=class-overloading. Folgende Klassen system/classes/accounts/CreateAccountContentControl.inc.php und system/classes/accounts/CreateAccountContentView.inc.php versucht ich zu überladen. Dafür habe ich das nicht existierende Verzeichnis user_classes/overloads/CreateAccountContentControl mit der Datei CreateAccountContentControl.inc.php erstellt. Der Name ist identisch mit dem Original. PHP: <?phprequire_once (DIR_FS_INC . 'xtc_validate_email.inc.php');require_once (DIR_FS_INC . 'xtc_encrypt_password.inc.php');require_once (DIR_FS_INC . 'xtc_create_password.inc.php');require_once (DIR_FS_INC . 'xtc_write_user_info.inc.php');require_once (DIR_WS_CLASSES . 'vat_validation.php');MainFactory::load_class('DataProcessing');class NAWCreateAccountContentControl extends NAWCreateAccountContentControl_parent{ public function proceed() { if(isset($this->v_data_array['POST']['action']) && ($this->v_data_array['POST']['action'] == 'process')) { $this->get_customers_data(); } return parent::proceed(); } protected function get_customers_data() { $this->customer_data_array['cid'] = xtc_db_prepare_input($this->v_data_array['POST']['cid']); parent::get_customers_data(); } protected function save_data() { $this->create_customer_sql_data_array(); parent::save_data(); } protected function create_customer_sql_data_array() { if( !empty($this->customer_data_array[TABLE_CUSTOMERS]) ) { $this->sql_data_array[TABLE_CUSTOMERS]['customers_cid'] = $this->customer_data_array['cid']; } parent::create_customer_sql_data_array(); }}?> und die zweite Datei liegt in dem Verzeichnis user_classes/overloads/CreateAccountContentView mit der Datei CreateAccountContentView.inc.php darin und dem Inhalt: PHP: <?phprequire_once(DIR_FS_INC . 'xtc_get_country_list.inc.php');class NAWCreateAccountContentView extends NAWCreateAccountContentView_parent{ protected function add_data() { $this->add_kundennummer(); parent::add_data(); } protected function add_kundennummer() { if ( isset($_POST['cid']) ) { $this->customer_data_array['cid'] = $_POST['cid']; } $this->content_array['form_data']['cid'] = array(); $this->content_array['form_data']['cid']['name'] = 'cid'; $this->content_array['form_data']['cid']['value'] = htmlspecialchars_wrapper($this->customer_data_array['cid']); $this->content_array['form_data']['cid']['required'] = 0; }}?> Leider werden diese Dateien überhaupt nicht berücksichtigt. Kann mir jemand erklären was ich falsch mache? Vielen Dank für eure Hilfe.
Wenn Deine Shopversion 3.1 oder 3.2 ist, müssen die Dateien statt in user_classs/ overloads/ in das Verzeichnis GXUsercomponents/ overloads/
Vielen Dank für den Tipp. Das hat mir schon weitergeholfen. Ich habe zusätzlich noch die Klasse CustomerWriteService überladen, um die Daten zu speichern. Leider erhalte ich die Meldung: Code: <b>Fatal error</b>: Declaration of CustomerWriteServiceOverload::createNewRegistree() must be compatible with CustomerWriteServiceInterface::createNewRegistree(CustomerEmailInterface $email, CustomerPasswordInterface $password, DateTime $dateOfBirth, CustomerVatNumberInterface $vatNumber, CustomerCallNumberInterface $telephoneNumber, CustomerCallNumberInterface $faxNumber, AddressBlockInterface $addressBlock, KeyValueCollection $addonValues) in <b>/html/shop/GXUserComponents/overloads/CustomerWriteService/CustomerWriteServiceOverload.inc.php</b> on line <b>247</b><br /> Ich habe die Klasse aus dem _samples Verzeichnis kopiert. Vielen Dank für eure Hilfe.
Das ist kein "Overload", sondern die Kopie des Originals! In einem Overload sollen nur die Dinge enthalten sein, die sich gegenüber dem Original ändern, und nicht der komplette Code des Originals inkl. der gewünschten Änderungen. Denn das ist NICHT updatesicher, weil Du bei jedem Gambio-Release prüfen musst, ob sich an dem Gambio-Original etwas geändert hat.
Das Problem tauchte auf, da Gambio der Methode einen weiteren Parameter gegeben hat, der aber in dem Beispiel nicht enthalten ist. Nachdem ich diesen Parameter ergänzt habe klappte es prompt. Wenn solche Fälle eintreffen können, ist ein updatesichers Entwickeln unmöglich
Updatesicher ist nicht = muss nie wieder geändert werden. Das bedeutet eher, dass es nicht überschrieben wird. Es gibt schon einige Dateien, die man mit einem Overload so erweitern kann, dass man das nicht jedes mal neu machen muss (wenn man, wie Avenger oben schon geschrieben hat, nur den notwendigen Code im Overload hat). Aber es ändert sich auch immer wieder etwas, da Gambio den ganzen alten Kram raus wirft und neu schreibt. Da kann es schon passieren, dass man seine Module / Anpassungen überprüfen und ändern muss.