[gelöst] Parameter abfangen und modifizieren

Hey liebe SW Community, ist es möglich über einen Hook Parameter abzufangen, zu modifizieren und an die eigentliche Funktion weiterzuleiten?

Hallo pwoerdehoff, versuch’ es doch mal damit: $return = $args-\>getReturn(); $args-\>setReturn($return); Gruß, Patrick :shopware:

so lässt sich deine frage eigentlich nicht beantworten. welchen parameter möchtest du bei welcher aktion modifizieren? im frontend oder im backend?

Hey, @Patrick Das funktioniert leider nicht, habe ich schon probiert. Mein hook wird vor der Funktion auf aufgerufen. @bui_ak Es handelt sich um die Funktion core -> class -> sAdmin -> sValidateStep2. Sie bekommt von innerhalb von Frontend -> Register -> validatePersonal ein Array mit rules übergeben. Diese Rules möchte ich überschreiben, sodass die Telefonnummer bei der Registrierung kein Pflichtfeld mehr ist.

Hallo pwoerdehoff, nach dem ich selbst länger vor diesem Problem gesessen habe hier meine Lösung: $this-\>subscribeEvent( 'Shopware\_Controllers\_Frontend\_Register\_validatePersonal\_FilterRules', 'onRegister' ); und die dazugehörige Manipulation: public function onRegister(Enlight\_Event\_EventArgs $args) { $rules = $args-\>getReturn(); $rules['fax']['required']=0; return $rules; } Ich habe dies aber wie man sieht nicht mit Hooks gelöst sondern mit Event. Ich hoffe das es genau das ist was du beabsichtigt hast? Hier kannst du z.B. das $rules Array aus validatePersonal() aus der Register.php manipulieren. Was ich allerdings noch nocht versucht habe ist das array zu erweitern. Viele Grüße mattis

1 „Gefällt mir“

Hey mattis, vielen Dank für deine Antwort. Das ist genau was ich gesucht habe, funtioniert wunderbar! Ich wusste garnicht das die Filterfuntionen ein Event feuern, muss man erstmal drauf kommen :wink:

Hallo zusammen, vielen Dank mattis, dein Beitrag hat mir weitergeholfen. Bei uns soll der Vorname, der Nachname und die Hausnummer kein Pflichtfeld mehr sein. Ich habe deshalb die Events: Shopware_Controllers_Frontend_Register_validatePersonal_FilterRules, Shopware_Controllers_Frontend_Register_validateBilling_FilterRules und Shopware_Controllers_Frontend_Register_validateShipping_FilterRules verwendet. Leider erhalte ich nun die Fehlermeldung: exception ‚Enlight_Exception‘ with message 'sSaveRegister #00: Fields are missing NO SESSION-COOKIE - d9g4q25jen3n21k0gfjdb95bg2 - Array ( [0] => billing#2->firstname [1] => billing#2->lastname [2] => billing#2->streetnumber ) ’ in /engine/core/class/sAdmin.php:4428 In der Funktion validateRegistrationFields() in der sAdmin Klasse (/engine/core/class/sAdmin.php) werden die benötigten Felder definiert. Es gibt dort auch ein Event Shopware_Modules_Admin_SaveRegister_FilterNeededFields. Ich weiß allerdings nicht, wie ich dieses Event überschreiben kann. Kann mir da jemand weiterhelfen? Vielen Dank! Viele Grüße Katja

Hallo zusammen, habe eine Lösung gefunden :wink: Vielleicht kann das jemand anders mal noch brauchen. $this-\>subscribeEvent( 'Shopware\_Modules\_Admin\_SaveRegister\_FilterNeededFields', 'ShopwareModulesAdminSaveRegisterFilterNeededFields' ); public function ShopwareModulesAdminSaveRegisterFilterNeededFields(Enlight\_Event\_EventArgs $arguments) { $neededFields = $arguments-\>getReturn(); $neededFields["billing"] = array("street", "zipcode", "city", "country"); return $neededFields; } Viele Grüße Katja