Plugin zur Registrierung

Hallo liebe Community,

ich bin ein Shopwareneuling und bin jetzt ein Shopware PlugIn Tutorial durchgegangen, bei dem man sich auf das Event:

Enlight_Controller_Action_PostDispatch_Frontend_Detail

abonniert hat. Damit wird man wach gemacht, wenn man ein Produkt öffnet.

Jetzt würde ich gerne ein PlugIn schreiben, das bei der Behandlung der Benutzerregistrierung wirkt und weiß nicht wie ich mich hier aufwecken lassen kann.

Gibt es dazu eine Beschreibung aller Events? 

Bzw. wie würdet ihr das machen. (Ich würde gerne den Benutzernamen validieren in dem ich ihne mit Werten von extern vergleiche)

Viele Grüße

es gibt den Profiler den du dir per Upload in Shopware installieren kannst.

dieser zeigt dir alle events variablen etc an

Ahja, danke. Ich hab durch deinen Hinweis getriggert einfach mit dem xdebugger mir das Event angesehen:

Enlight_Controller_Action_PostDispatch_Frontend_Register

Kann ich denn irgendwie aus dem PlugIn heraus ein Textfeld anlegen?

Vielleicht kennt ja jemand ein PlugIn, bei dem das bereits gemacht wird. Dann könnt ich mir das da abschauen.

a)  gibt es eine ordentliche Doku: https://developers.shopware.com/

da findest du auch brauchbare Beispiele wie man die Attributes-Tabellen erweitert. Wenn Du ein reines Textsnippet erzeugen möchtest, reicht es in den Theme Anpassungen den Default-Wert mit zu geben {s namespace= name=}Defaultwert{/s}

b) im Frontend immer die Secure Events subscriben:

Enlight_Controller_Action_PostDispatchSecure_Frontend_Register

Erstmal danke BestShopPossible,

also ich hab ein wenig in der Doku gesucht und bin auch (glaub ich) fündig geworden. Habe aber trotzdem Startschwierigkeiten.

Also ich hab mich, wie in b) auf Enlight_Controller_Action_PostDispatchSecure_Frontend_Register gehangen.

Dann hab ich 

$subject = $args->getSubject();
$subject->View()->addTemplateDir($this->Path() . ‚Views/‘);

versucht mein Template einzubinden.

Hier habe ich unter meinem Plugin eine Views/frontend/register/biling_fieldset.tpl erstellt.

Dorthin habe ich dann den ganzen Block {block name=‚frontend_register_billing_fieldset_company_body‘} aus der original Datei kopiert.

Jetzt hab ich versuchshalber alle Placeholder zu RegisterLabelDepartment gemacht. 

Das ist das mittlere der drei Felder. 

Trotzdem sind noch alle drei mit verschiedenen Namen belegt.

 

@SieOtto schrieb:

 

Jetzt hab ich versuchshalber alle Placeholder zu RegisterLabelDepartment gemacht. 

Das ist das mittlere der drei Felder. 

Trotzdem sind noch alle drei mit verschiedenen Namen belegt.

 

Versteh ich nicht. Was soll erreicht werden? Was heißt Placehoder zu RegisterLabelDepartment gemacht?

Heißt das Du wolltest, die Textsnippets {s …}Defaultwert{/s} zu Versuchszwecken ändern indem Du eine Label-Beschriftung mit einer anderen ausgetauscht hast?

Bei Shopware ist es wichtig, dass die Pfade auch richtig sind. Heißt deine Ordnerstruktur sieht dann auch so aus: …/Views/frontend/register und oben steht ein extends file = und dein Plug-In liegt im custom Ordner? 

Hallo BestShopPossible,

es ist tatsächlich der Pfad, dieser wird bei mir auf dem Windows Server falsch zusammengesetzt. Wenn ich das Plugin auf einem Linux Server teste, gehts…

Da hab ich gerade aber andere Probleme.

Vielleicht hast du das schon mal gesehen:

Mir fehlt das Theme. In Web/Cache wird eine leere css Datei erzeugt. Ich bekomme also eine blanke HTML Seite

Hört sich nach einem 5xx Fehler und damit Serverprotokollsuche an. 

Ansonsten Frontenderrors anschmeißen und im Forum einen alten Thread raussuchen in welchem beschrieben wird, wie man an Fehlermeldungen in SW kommt. Eine Fehlermeldung gibt es „immer“, man muss sie nur finden :wink:

Also, es lag am Server. Hab jetzt die richtigen Stellschrauben gefunden. Ich habe jetzt auch ein Feld in der View mit dem passenden Placeholder.

Es ist die alte Kundennummer

was mir jetzt aus der Beschreibung nicht klar wird:

1.) Ist wie ich jetzt der Benutzertablle in der Datenbank eine neue Spalte hinzufügen kann um den Wert hier zu speichern und

2.) wie ich an die Validierungsfunktion komme, bzw. wie ich an die Funktion des Submit-Buttons komme. Ich nehme mal an, dass da die Validierung gestartet wird.

Für 1) gibt es in shopware die TABELLENNAME_attributes Tabellen. Wenn man Tabellen erweitern will, dann erweitert man die …_attributes Tabellen, diese werden bei Updates nicht überschrieben.

https://developers.shopware.com/developers-guide/attribute-system/#schema-operations-and-configuration

Für 2) Das Formular des Submit-Buttons verweist ja (im Theme) auf einen bestimmten Controller und eine bestimmte Action. Ab da müsstest du dann eben in /engine/Shopware/Controllers/Frontend auf die Suche gehen. Wo ist die Action (bei PHP-Storm strg+umschalt+F auf den Controllers Ordner und dann „[ACTIONNAME]Action“ als Suchparamater -> sprich „…Action“) und was passiert ab da, welche Funktionen werden aufgerufen. Da kommt man schnell auf die gewünschten (rechtsklick->Go To->Declaration).

Danke, das hat geholfen.

Nächste Frage:

Wenn ich die eingegebenen Daten speichere mit 

$controller = $args -> getSubject();
$request = $controller -> Request();
$data = $request -> getParams();
$controller->View()->assign($data);

Dann werden alle Shopwareeigenen Daten übernommen.

Meine Daten. z.b. die selbst angelegte Kundennummer

name=“register[billing][attribute][kundennummer]”

nicht.

D.h. wenn ich die Registrierung abbreche, lande ich wieder bei der Registrierungsseite, allerdings fehlen mir die Eingaben aus meinen Feldern.

Na bei deineem Beispiel reicherst du das $data Array auch nicht an.

Bei den meisten Controllern zieht sich Shopware deine angelegten Attributes-Felder mit. Einfach mal in der Freitextfeldverwaltung prüfen ob die da auch drinstehen. Ansonsten vielleicht darüber einmal erstellen. IMMER wichtig (ob Freitextfeldverwaltung oder über Plug-In) immer im Anschluss die Models neu generieren. Am besten einfach mal in der Freitextfeld-Verwaltung die Models neu generieren und gucken ob es geht. 

Ansonsten müsstest du das natürlich so machen:

$data = $request -> getParams();
//$data is a flat array? if so:
$data['myData'] = $myData;
//if following line should work:
$controller->View()->assign($data);