Erweiterung des Kundensystems

Hallo zusammen, ich bräuchte mal einen Ansatz, wie ich grundsätzlich Erweiterungen am Shopware 3.5 System vornehme, bzw. welche Art von Erweiterung aus Systemsicht in meinem Fall Sinn macht. Ich möchte die Registrierung von Neukunden einschränken - ein Neukunde kann sich nur nach der Eingabe einer „TAN Nummer“ registrieren. Diese Einschränkung hat den Hintergrund, dass man den Shop nur durch Werbung durch einen Bestandskunden benutzen dürfen soll - jeder Bestandskunde hat also eine (erweiterbare) Range von TANs zur Verfügung. Alle geworbenen Neukunden sollen mit dem werbenden Bestandskunden verknüpft sein. Mein erster grober Ansatz: - eine Erweiterung der s_user Tabelle um ein Feld zum Speichern des Werbers - eine neue Tabelle mit generierten TANs, die mit Bestandskunden verknüpft sind - eine Erweiterung des Registrierungsformulars um das Pflichtfeld „TAN Nummer“ - nach Registrierung wir die TAN gesperrt, der Neukunde aktiviert (sieht Preise, kann shoppen) und die ID des werbenden Bestandskunden beim Neukunden gespeichert. Jetzt stellt sich mir die Frage, wie ich eine solche Erweiterung am geschicktesten umsetze? Welcher Ansatz entspricht hier der Philosophie von Shopware und treibt mir nicht bei jedem Shopwareupdate den Schweis auf die Stirn? Erstellt man ein Plugin oder ändert man direkt den bestehenden Code an den entsprechenden Stellen? Vielen Dank im Voraus und viele Grüße Willi

Hallo, also zunächst einmal findest du unter http://www.shopware.de/wiki/Tutorials-z … l_522.html schon mal einige Grundlagen-Tutorials zur Programmierung - da wird in den nächsten Tagen & Wochen natürlich noch einiges folgen. Von der Philosophie her soll und muss das als Plugin umgesetzt werden, das ist im Prinzip sogar relativ schnell gemacht. Hier ein paar Ansätze: - Bestehende Tabellen sollte man nicht erweitern, dann lieber eine neue Tabelle anlegen und diese mit der bestehenden Verknüpfen Eigene Tabellen haben den Namespace s_plugin_[Name des Plugins]_[Subtabelle] In deinem Fall hätte man also 2 Tabellen s_plugin_usertan_tans id | userID | tan s_plugin_usertan_users id | userID | refererID Der Code für dein Plugin würde in etwas wie folgt aussehen Neues Verzeichnis Shopware\Plugins\Local\Frontend\Usertan Neue Datei in diesem Verz. Bootstrap.php [code]<?php class Shopware_Plugins_Frontend_Usertan_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public function install()
{
$event = $this->createEvent( ‚Enlight_Controller_Action_PostDispatch_Frontend_Register‘, array($this, ‚onPostDispatch‘) ); $this->subscribeEvent($event); $event = $this->createEvent( ‚Shopware_Controllers_Frontend_Register_validatePersonal_FilterRules‘, ‚onCheckPersonal‘ ); $this->subscribeEvent($event); $event = $this->createEvent( ‚Shopware_Modules_Admin_ValidateStep2_FilterResult‘, ‚onCheckRegisterValidate‘ ); $this->subscribeEvent($event); } public static function onPostDispatch(Enlight_Event_EventArgs $args) { // Eingabefeld Tan in Registrierung hinzufügen if(!$args->getSubject()->Request()->isDispatched()) return; $view = $args->getSubject()->View(); $request = $args->getSubject()->Request(); $code = ’

TAN-Nummer
'; $view->extendsBlock(‚frontend_register_personal_fieldset_input_firstname‘,$code,‚prepend‘); } public static function onOrder (Enlight_Event_EventArgs $args) { // Tan zum Pflichtfeld machen $array = $args->getReturn(); $array[„tan“] = array(„required“=>1); return $array; } public static function onCheckRegisterValidate (Enlight_Event_EventArgs $args) { // Tan zum Pflichtfeld machen $post = $args->getPost(); $errors = $args->getReturn(); $tan = $post[„tan“]; $checkIfTanExists = Shopware()->Db()->fetchOne(" SELECT userID FROM s_plugin_usertan_tans WHERE tan = ? ",array($tan)); if (!empty($checkIfTanExists)){ Shopware()->Session()->refererID = $checkIfTanExists; return $errors; }else { $errors[0] = „Bitte geben Sie eine gültige Tan ein“; $errors[1][„tan“] = true; return $errors; } } } [/code] Das ist jetzt nicht vollständig, aber ein guter Einstieg. Der Code fügt ein neues Feld in die Registrierung ein, prüft ob das Feld vorhanden ist und prüft ob die TAN bekannt ist. Anschließend wird die korrespondierende userID in die Session geschrieben. Jetzt müsste man nur noch im Event Shopware_Modules_Admin_SaveRegisterMainData_Return (core/class/sAdmin.php) prüfen ob die Session-Variable refererID gesetzt ist und diese zusammen mit der ID des neu hinzugefügten Users in der Tabelle s_plugin_usertan_users speichern

1 Like

P.s. in einigen Tabellen gibt es auch Attributsfelder die man verwenden kann, in der s_user z.B. auch! Die kannst du natürlich auch nutzen, da besteht nur die Gefahr dass das irgendwann mit anderen Plugins kollidiert.

Hallo, vielen Dank für die schnelle und umfassende Antwort. So werde ich sicher einen schnellen Einstieg finden. Der Support ist einfach der Hammer! :thumbup: Viele Grüße Willi

[quote=“shopprojekt”]Der Support ist einfach der Hammer! :thumbup:[/quote] In der Tat. Und wenn man sieht, wie einfach man im Grunde auch relativ komplexe Anforderungen umsetzen kann, ist das schon sehr beeindruckend. Und das sogar ohne das Template anzufassen… Diese Power habe ich bisher noch bei keinem anderen Shop-System gesehen.