Ich hätte eine Anregung zu "Kontaktformular mit Daten vorbelegen".
Aktuell wird nur der Name und die eMail-Adresse im Kontaktformular vorbelegt. Gut aktuell gibt es auch nur so ein minimal Kontaktformular.
Aus meiner Sicht spricht jedoch nichts dagegen das Source-seitig so vorzubereiten, dass alle bekannten Kundendaten vorbelegt werden können, wenn der Kunde eingeloggt das Kontaktformular bedient.
Folgende Lösung hab ich aus einem Modul und geändert bzw. erweitert.
Vorteil, es ist die kompakteste Lösung und noch dazu mal verständlich.
Man muss zum Erweitern nur mit phpMyAdmin in die Datenbank Tabellen customers oder adress book sehen und sich die benötigten Feldnamen rausschreiben.
Standard modified eCommerce Shopsoftware aktuell ist folgendes in der shop_content.php:
if (isset ($_SESSION['customer_id'])) { $customers_name = $_SESSION['customer_first_name'].' '.$_SESSION['customer_last_name']; //BOF - Dokuman - 2009-09-04: preallocate email address on contact form //$email_address = $_SESSION['customer_email_address']; $c_query = xtc_db_query
("SELECT * FROM ".TABLE_CUSTOMERS
." WHERE customers_id='".$_SESSION['customer_id']."'"); $c_data = xtc_db_fetch_array
($c_query); $email_address = $c_data['customers_email_address']; //EOF - Dokuman - 2009-09-04: preallocate email address on contact form } Einfacher und sinnvoller wäre imho das hier:
if (isset ($_SESSION['customer_id'])) { $customerQuery = xtc_db_query
("SELECT * FROM ".TABLE_CUSTOMERS
." c, ".TABLE_ADDRESS_BOOK
." ab WHERE c.customers_id = '".(int
) $_SESSION['customer_id']."' and c.customers_id = ab.customers_id"); $customer_data = xtc_db_fetch_array
($customerQuery); } Das Vorbelegen selbst funktioniert dann damit:
$smarty->assign('VVIMG', '<img src="'.xtc_href_link(FILENAME_DISPLAY_VVCODES).'" alt="Captcha" />');
$smarty->assign('INPUT_CODE', xtc_draw_input_field('vvcode', '', 'size="8" maxlength="6"', 'text', false));
$smarty->assign('INPUT_NAME', xtc_draw_input_field('name', ($error ? xtc_db_input($_POST['name']) : $customer_data['entry_firstname'] . " " . $customer_data['entry_lastname']), 'size="30"'));
$smarty->assign('INPUT_FIRMA', xtc_draw_input_field('firma', ($error ? $_POST['firma'] : $customer_data['entry_company'])));
$smarty->assign('INPUT_STRASSE', xtc_draw_input_field('strasse', ($error ? $_POST['strasse'] : $customer_data['entry_street_address'])));
$smarty->assign('INPUT_PLZ', xtc_draw_input_field('plz', ($error ? $_POST['plz'] : $customer_data['entry_postcode'])));
$smarty->assign('INPUT_ORT', xtc_draw_input_field('ort', ($error ? $_POST['ort'] : $customer_data['entry_city'])));
$smarty->assign('INPUT_TELEFON', xtc_draw_input_field('telefon', ($error ? xtc_db_input($_POST['telefon']) : $customer_data['customers_telephone']), 'size="30"'));
$smarty->assign('INPUT_FAX', xtc_draw_input_field('fax', ($error ? xtc_db_input($_POST['fax']) : $customer_data['customers_fax']), 'size="30"'));
$smarty->assign('INPUT_EMAIL', xtc_draw_input_field('email', ($error ? xtc_db_input($_POST['email']) : $customer_data['customers_email_address']), 'size="30"'));
$smarty->assign('INPUT_TEXT', xtc_draw_textarea_field('message_body', 'soft', 50, 15, ($error ? xtc_db_input($_POST['message_body']) : $message_body)));
$smarty->assign('BUTTON_SUBMIT', xtc_image_submit('button_continue.gif', IMAGE_BUTTON_CONTINUE));
$smarty->assign('FORM_END', '</form>');
Also ausschlaggebend ist z.B. das hier:
$customer_data['entry_company']
Statt entry_company muss nur das entsprechende DB-Feld rein, oder eben meinen Code übernehmen.
Wem das Standard-Formular nicht ausreicht, muss im Template dann nur noch die contact_us.html erweitern.
Zusätzlich muss noch der Bereich um xtc_php_mail( in der shop_content.php geändert werden.
Ein Beispiel im ZIP anbei.
Habs auf Basis von Trunk 321 so geändert wie ich mir das vorstelle.
Ist ungetestet da ich mehrere Formulare im Shop habe und es dann in einigen Bereich anders aussieht, sollte jedoch funktionieren. Die Änderungen zum derzeitigen Standard sind gering, es wird nur erweitert, Kern ist gleich.