Hallo zusammen, ich versuche mit Hilfe eines Plugin die Registrierung um ein zusätzliche Feld zu erweitern und anschließend auszuwerten. Allerdings sehe ich keine Möglichkeit die Error-Variable zu setzen wodurch ich nicht auf Fehler bei der Eingabe reagieren kann und somit auch nicht die normale Reaktion bei Fehlern während der Registrierung erzeugt wird. Folgendes habe ich bisher getan: [list] [*] Registrierungsformular mittels Enlight_Controller_Action_PostDispatch-Event und anschließendes laden einer Templateanpassung um das neue Feld erweitert[/*] [*] Hook registriert der nach savePersonalAction läuft[/*] [*] POST mittels Shopware()->Modules()->Admin()->sSYSTEM->_POST abgefragt und ausgewertet[/*][/list] Das Problem ist nun das Setzen der error-Variable innerhalb der Klasse Shopware_Controllers_Frontend_Register. Wenn ich diese Variable setzen könnte würde innerhalb der Methode saveRegisterAction der Aufruf von saveRegister übersprungen. Leider sind alle meine Versuche diese Variable zu setzen gescheitert. Ist dies überhaupt möglich? Oder hat jemand eine alternative Idee? Hier noch etwas Code damit es besser nachvollziehbar ist. install() innerhalb des Bootstrap des Plugins: $event = $this-\>createHook( 'Shopware\_Controllers\_Frontend\_Register', 'savePersonalAction', 'onRegister', Enlight\_Hook\_HookHandler::TypeAfter, 0 ); $this-\>subscribeHook($event);
static function onRegister(Enlight\_Hook\_HookArgs $args) { $error = false; $subject = $args-\>getSubject(); $request = $subject-\>Request(); $view = $subject-\>View(); $post = Shopware()-\>Modules()-\>Admin()-\>sSYSTEM-\>\_POST; //Checkbox für Eigenschaft ausgewählt if(isset($post['signed'])&&intval($post['signed'])==1) { //Checkbox für extra AGB der Eigenschaft ausgewählt if(isset($post['agb'])&&intval($post['agb'])==1) { echo("Juhu, ich habe diese Eigenschaft erhalten"); } else { $error=true; echo("Och nö! Die AGBs wurden nicht bestätigt"); $view-\>register-\>personal-\>error\_messages = "Bitte bestätigen Sie die AGBs für diese Eigenschaft"; } } }
Original saveRegisterAction() innerhalb derer savePersonalAction gerufen wird: public function saveRegisterAction() { if($this-\>request-\>isPost()) { $this-\>savePersonalAction(); $this-\>saveBillingAction(); if(!empty($this-\>post['billing']['shippingAddress'])) { $this-\>saveShippingAction(); } if(isset($this-\>post['payment'])) { $this-\>savePaymentAction(); } if(empty($this-\>error)) { $this-\>saveRegister(); } } $this-\>forward('index'); }
Ich hoffe es kann mir jemand helfen. Viele Grüße zacfry
Hi zac und herzllich Willkommen im Forum … ich hab dir da mal was (ein)gebaut… Und zwar über einen zweiten Hook (TypeAfter) auf die Funktion validatePersonal. Diesem kann man per $args->getReturn(); den Rückgabewert (also das Fehler-Array) der original-Methode holen lassen, dann die eigene Prüfung bauen und am Ende per $args->setReturn($var); das Fehler-Array wieder zurückgeben. @Shopware: Ich wollte es eigentlich erst über den Filter ‚Shopware_Controllers_Frontend_Register_validatePersonal_FilterRules‘ machen, aber kann es sein, das die Validate-Funktion nicht mehr mit Abhängigkeiten arbeiten kann??? Also wenn Wert A gesetzt ist, dann muss auch was bei Wert B stehen. @Shopware die zweite: wie kann man eigentlich in einer aufgerufenen Hook-Funktion die Post-Parameter abfragen??? mit $this->Request()->getParam(‚ParamName‘) oder ähnlichen Konstrukten gehts net… Viele Grüße und Gutes Nächtle Thomas
Super es klappt! Danke!