Warum ich Gambio GX2 einem Magento-Shop vorziehe

Es gibt viele Systeme im Internet, um einen eigenen Online-Shop aufzubauen. Viele sind sogar bei den Webhosting-Anbietern gleich mit dabei – man braucht nur noch seine Artikel inklusive Beschreibung und Foto hochladen und fertig ist das Webangebot. Oder etwa doch nicht?

Ganz so einfach ist das nicht. Wie ich im vorherigen Blogeintrag geschrieben habe, gibt es jede Menge mehr zu tun als nur seine 10 Artikel eine vernünftige Beschreibung zu verpassen, Foto dazu, Preis Pi mal Daumen kalkuliert und fertig. Und dieses „Tun“ ist der Grund, warum ich eher zu Gambio denn zu Magento tendiere. Klar, beide Shops können recht viel und Magento hat ein gefälligeres, modernes Äußeres. Wäre eigentlich ein Punkt für Magento. Der große Negativ-Punkt ist jedoch, daß es keine günstige Möglichkeit gibt, eine Warenwirtschaft an Magento anzudocken. Ich bevorzuge die JTL-Warenwirtschaft. Sie kann im Netzwerk betrieben werden, ein Server beinhaltet die SQL-Datenbank und mehrere Clients können gemeinsam an den Artikeln/Bestellungen usw. arbeiten. Sind Aktualisierungen getätigt, werden diese per Connector automatisch in den Gambio Shop geladen.

Diese Vorgehensweise funktioniert nicht mit Magento. Zwar sind Connectoren von JTL angekündigt, aber bislang noch nicht erschienen. Alternativen wären kommerzielle Anbieter, aber dort kostet eine Schnittstelle ab 500,- netto aufwärts. Ich denke, zu viele für jemanden, der klein anfangen will. Da ich in meinen Installationen eine Trennung von Präsentation (Onlineshop) und Datenhaltung (Warenwirtschaft) vornehme, ist dies ein sehr gewichtiges Manko, welches auch die hübscher aussehenden Oberflächen von Magento nicht wett machen können.

 

Vorteile von zwei einzelnen Installationen:

  • Die Trennung der Daten von der Präsentation hat trotz des initialen Mehraufwands der Installation massive Vorteile gegenüber einer kompletten Datenhaltung im Shop selbst:
  • Änderungen werden nicht gleich im Live-Shop sichtbar
  • Datenbackup können viel einfacher gestaltet werden
  • Firmeninterne Daten werden nicht ins Internet ausgelagert, wenn der DB-Server im eigenen Haus steht
  • Da beide Systeme unabhängig voneinander funktionieren, ist die Wahrscheinlichkeit eines Totalausfalls/Verlust von Daten geringer
  • Anpassung der Artikeldaten geschehen immer „offline“ und können erst auf Knopfdruck im Produktivshop sichtbar gemacht werden

 

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.