Antwort #7 am: 30. November 2010, 09:50:51
Okay, das mit dem Kästchen zum Anhaken ist vielleicht nicht so das Wahre... Deshalb nun was richtig Schönes
Vorab: Ich fand den nachfolgenden Code bei der "Konkurrenz" unter folgendem Link:
Kontodateneingabe Nicht Bei Jeder Lastschriftbestellung. In diesem Thread wird der Code über mehrere Postings hinweg verfeinert. Darüber hinaus findet man Teile dieses Codes mittlerweile auch an anderen Stellen. Alle Veröffentlichungen haben jedoch ein paar Fehler gemeinsam (Leerzeichen in Variablen-Namen, Umbrüche in Code-Zeilen, wo keine sein dürfen) und enthalten Bezeichner, die je nach xtC-Variante angepasst werden müssen.
Nachdem ich mich durch diese Widrigkeiten gewühlt und alles korrigiert und angepasst habe, findet ihr hier nun den Code, der für modified eCommerce Shopsoftware, Version 1.05 richtig ist.
Nun zur Sache: Mit der nachfolgenden Änderung wird erreicht, dass ein Kunde, der einmal bestellt und seine Kontodaten zur Zahlung per Lastschrift eingegeben hat, diese Kontodaten ab der nächsten Bestellung nicht erneut eingeben muss. Konkret ist es so, dass die Kontodaten aus der Datenbank ausgelesen und in den Eingabefeldern angezeigt werden (so, wie es jetzt auch schon mit dem Namen des Kunden geschieht). Falls der Kunde eine andere Bankverbindung angeben möchte, kann er die Daten einfach überschreiben. Bei jeder nachfolgenden Bestellung wird jeweils die bei der davor aufgegebenen Bestellung eingegebene Bankverbindung angezeigt.
Um das zu erreichen, ist die Datei banktransfer.php im Verzeichnis root/includes/modules/payment zu ändern. Konkret ist die Funktion "function selection()" komplett durch folgenden Code zu ersetzen
function selection
() { global $order; $banktransfer_text='banktransfer_'; $banktransfer_blz_text=$banktransfer_text. 'blz'; $banktransfer_number_text=$banktransfer_text.'number'; $banktransfer_bankname_text=$banktransfer_text.'bankname'; $banktransfer_owner_text=$banktransfer_text.'owner'; $blz=$_GET[$banktransfer_blz_text]; $number=$_GET[$banktransfer_number_text]; $bankname=$_GET[$banktransfer_bankname_text]; $owner=$_GET[$banktransfer_owner_text]; $billing_name=trim($order->billing['firstname'] . ' ' . $order->billing['lastname']); if (!$owner) { $owner=$billing_name; } if ( $_SESSION['customers_status']['customers_status_id']<>DEFAULT_CUSTOMERS_STATUS_ID_GUEST
&& $_SESSION['customer_country_id']==STORE_COUNTRY
) { $post_blz=$_POST[$banktransfer_blz_text]; $post_number=$_POST[$banktransfer_number_text]; $post_bankname=$_POST[$banktransfer_bankname_text]; $post_owner=$_POST[$banktransfer_owner_text]; if (!$post_owner) { $post_owner=$billing_name; } if ($post_blz && $post_number && $post_bankname && $post_owner) { //We are here apparently after a payment error => use posted data (if completely available), //as it might differ from last payment data $blz=$post_blz; $number=$post_number; $bankname=$post_bankname; $owner=$post_owner; } else { //Try to find last order for customer with banktransfer payment and fetch bank data from there $banktransfer_query = xtc_db_query
("select bt.banktransfer_owner,bt.banktransfer_number, bt.banktransfer_bankname, bt.banktransfer_blz from banktransfer bt, orders o where o.customers_id=".$_SESSION['customer_id']." and o.orders_id=bt.orders_id LIMIT 1"); while ($bank_data=xtc_db_fetch_array
($banktransfer_query)) { $this_blz=$bank_data[$banktransfer_blz_text]; if ($this_blz) { $blz=$this_blz; $number=$bank_data[$banktransfer_number_text]; $bankname=$bank_data[$banktransfer_bankname_text]; $owner=$bank_data[$banktransfer_owner_text]; } } } } $title_text='title'; $field_text='field'; $selection = array( 'id' => $this->code, 'module' => $this->title, 'description'=>$this->info, 'fields' => array(array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_NOTE
, $field_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_INFO
), array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_OWNER
, $field_text => xtc_draw_input_field
('banktransfer_owner', $owner,'size="50"')), array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_BLZ
, $field_text => xtc_draw_input_field
($banktransfer_blz_text,$blz, 'size="8" maxlength="8"')), array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_NUMBER
, $field_text => xtc_draw_input_field
($banktransfer_number_text, $number, 'size="16" maxlength="32"')), array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_NAME
, $field_text => xtc_draw_input_field
($banktransfer_bankname_text,$bankname,'size="50"')), array( $title_text => '', $field_text => xtc_draw_hidden_field
('recheckok', $_POST['recheckok'])) )); if (MODULE_PAYMENT_BANKTRANSFER_FAX_CONFIRMATION
=='true') { $selection['fields'][] = array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_NOTE
, $field_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_NOTE2
. '<a href="' . MODULE_PAYMENT_BANKTRANSFER_URL_NOTE
. '" target="_blank">' . MODULE_PAYMENT_BANKTRANSFER_TEXT_NOTE3
. '</a>' . MODULE_PAYMENT_BANKTRANSFER_TEXT_NOTE4
); $selection['fields'][] = array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_FAX
, $field_text => xtc_draw_checkbox_field
('banktransfer_fax' , 'on')); } return $selection; } Und wenn ihr schon an der banktransfer.php seid: Immer wieder stört es Kunden, dass die komplette Bankverbindung in de abschließenden Bestätigungsseite im Klartext angezeigt wird. Um das zu vermeiden und jeweils die erste Hälfte der Bankleitzahl und der Kontonummer durch x zu ersetzen, ist die etwas weiter unten in der banktransfer.php stehende Funktion "function confirmation()" komplett durch folgenden Code zu ersetzen
function confirmation
() { if ($_POST['banktransfer_owner']) { $title_text='title'; $field_text='field'; $fields_text='fields'; $blz=$this->banktransfer_blz; $len=strlen($blz)/2; $blz=str_repeat('x',$len).substr($blz, $len); $number=$this->banktransfer_number; $len=strlen($number)/2; $number=str_repeat('x',$len).substr($number,$len); $confirmation = array( $title_text => $this->title, $fields_text => array(array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_OWNER
, $field_text => $this->banktransfer_owner), array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_BLZ
, $field_text => $blz), array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_NUMBER
, $field_text => $number), array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_NAME
, $field_text => $this->banktransfer_bankname) )); } if ($_POST['banktransfer_fax'] == "on") { $confirmation = array( $fields_text => array(array( $title_text => MODULE_PAYMENT_BANKTRANSFER_TEXT_BANK_FAX
))); $this->banktransfer_fax = "on"; } return $confirmation; }