Zusätzliches Pflichtfeld in Gambio GX2

Manchmal möchte man zusätzliche Angaben von einem Kunden wissen, für die Gambio GX2 kein Feld zur Verfügung stellt. In meinem Beispiel wollte ich wissen, woher der Benutzer meine Webseite kennt. Dies ist eine Standard-Frage für das Marketing, welcher Channel für einen Online-Shop am besten funktioniert.

Hierfür habe ich beim Erstellen des Benutzeraccounts ein weiteres Feld eingefügt:

 

Folgende Änderungen sind dafür notwendig:

In der Datenbank von Gambio habe ich eine neue Tabelle angelegt, welche die Optionen der Dropdown-Box beinhaltet. Ich habe sie reasons genannt, weil mir schlicht und ergreifend kein besserer Name eingefallen ist ;-). Achtung: Unbedingt ein Backup der Datenbank machen, es können immer Fehler passieren und das Risiko trägt immer der, der ändert! Ich weiß, das wurde schon oft geschrieben, aber man kann es gar nicht oft genug wiederholen.

Felder anlegen:

reasons_id, int(11), autoincrement -> Primärschlüssel

reasons_text, text

status, int(1), selbst definiert, 1

 

Das war einfach. Da wir wissen wollen, welcher Benutzer welche Option ausgewählt hat, muss die Information, was der Benutzer ausgewählt hat, in dessen Datenbank-Eintrag gespeichert werden. Dazu nutze ich die  Tabelle address_book. In ihr werden die Stammdaten des Kunden gespeichert, warum also nicht auch die Beweggründe auf die Seite zu kommen? Ich erweitere die Tabelle um ein Feld entry_reasons_id, int(11), selbst definiert 0, welches am Ende die reasons_id speichern soll:

So, das war’s mit den Änderungen an der Gambio GX Datenbank. Kommen wir zu den Änderungen auf Dateiebene.

Zuerst machen wir die neue Tabelle reasons für Gambio bekannt: in /includes/database_tables.php folgende Codezeile hinzufügen:

define(‚TABLE_REASONS‘,’reasons‘);

Die Änderungen im Registrierformular durchführen:
Die Datei /templates/<DeinTemplate>/module/create_account.html ändern:
Nach
<tr>
<td><label>{$txt.text_email_confirm}</label></td>
<td>
<input type=“text“ name=“{$INPUT_EMAIL_CONFIRM_NAME}“ value=“{if !$error_mail}{$form_data.email_confirm.value}{/if}“ />
{if $form_data.email_confirm.required == ‚1‘} * {/if}
{if $error_mail}<span>{$error_mail}</span>{/if}
</td>

folgende Code einfügen:

<tr>
<td><label>Woher kennen Sie yourwebsite.de?</label></td>
<td>
<select name=“{$form_data.reason.name}“>
{foreach key=reasons item=reason_data from=$reasons_data}
<option value=“{$reason_data.reasons_id}“{if $reasons_data.reasons_id == $form_data.reason.value} selected=“selected“{/if}>{$reason_data.reasons_text}                            </option>
{/foreach}
</select>
{if $form_data.reason.required == ‚1‘} * {/if}
{if $error_country}<span>{$error_country}</span>{/if}
</td>
</tr>
Folgende Ergänzungen in create_account.php durchführen:

Nach:         require_once (DIR_FS_INC.’xtc_get_country_list.inc.php‘);
Einfügen:    require_once (DIR_FS_INC.’xtc_get_reasons_list.inc.php‘);

Nach:        $country = xtc_db_prepare_input($_POST[‚country‘]);
Einfügen:    $reason = xtc_db_prepare_input($_POST[‚reason‘]);

Achtung, nur 1 Zeile:
Zeile:            $sql_data_array = array (‚customers_id‘ => $_SESSION[‚customer_id‘], ‚entry_firstname‘ => $firstname, ‚entry_lastname‘ => $lastname, ‚entry_street_address‘ => $street_address,                 ‚entry_postcode‘ => $postcode, ‚entry_city‘ => $city, ‚entry_country_id‘ => $country,’address_date_added‘ => ’now()‘,’address_last_modified‘ => ’now()‘);
Ersetzen durch:    $sql_data_array = array (‚customers_id‘ => $_SESSION[‚customer_id‘], ‚entry_firstname‘ => $firstname, ‚entry_lastname‘ => $lastname, ‚entry_street_address‘ => $street_address,                 ‚entry_postcode‘ => $postcode, ‚entry_city‘ => $city, ‚entry_country_id‘ => $country, ‚entry_reasons_id‘ => $reason,’address_date_added‘ => ’now()‘,’address_last_modified‘ => ’now()‘);

Nach:        $smarty->assign(‚countries_data‘, xtc_get_countriesList());
Einfügen:    $smarty->assign(‚SELECT_REASON‘, xtc_get_reason_list(array (’name‘ => ‚reason‘, ‚text‘ => ‚&nbsp;‘. (xtc_not_null(ENTRY_COUNTRY_TEXT) ? ‚<span                                 class=“inputRequirement“>‘.ENTRY_COUNTRY_TEXT.'</span>‘ : “)), $selected));
$t_form_data_array[‚reason‘][’name‘] = ‚reason‘;
$t_form_data_array[‚reason‘][‚value‘] = $selected;
$t_form_data_array[‚reason‘][‚required‘] = 1;
$t_form_data_array[‚reason‘][‚required_symbol‘] = ENTRY_COUNTRY_TEXT;
$smarty->assign(‚reasons_data‘, xtc_get_reasonsList());

Angehangene Dateien aus dem Zip-Achiv xtc_get_reasons.inc.php und xtc_get_reasons_list.php nach \inc kopieren.

Link: 01. Dropdownfeld in CreateAccount

Das war’s. Jetzt bekommt man beim Erstellen eines Benutzerkontos (nicht Gastkonto) die Box angezeigt, welche mit den Werten aus der Tabelle reasons gefüllt sind. Gespeichert werden die Daten in der Tabelle address_book.

Im nächsten Beitrag werde ich zeigen, wie man die gespeicherten Ergebnisse ohne SQL-Kenntnisse schnell abfragen kann. Bitte nutzt die Kommentare für Fragen, Vorschläge oder Verbesserungen.