Hooks - Parameter modifizieren

Ich habe nun das Tutorial durchgearbeitet und bin da gleichmal über ein Problem gestolpert: Wie kann ich denn die Parameter modifizieren, die an die Funktion übergeben werden? mit $args->getArgs() komme ich ja, an die Parameter ran. Ich habe nun da dran ein paar Veränderungen vorgenommen, aber in der Hauptfunktion stehen die Parameter dennoch in der unveränderten Form zur Verfügung. Gibt es sowas wie $args->setArgs() um den veränderten Parameter zuzuweisen? Leider ist im Tutorial ein solches Beispiel nicht vorhanden :frowning: Gruss René

Probiere mal $args->set(‘name_parameter’,‘value’); - das müsste ich aber auch nachsehen / ansonsten kannst du auch nochmal folgendes probieren. - Hook vom Typ Replace - Aufruf der Originalfunktion mit $args->getSubject()->Methode(Parameter);

hm… also erste variante hab ich nicht hinbekommen. wenn ich das so mache, dann ist der parameter immer null. der Originalaufruf lautet: sendMail($variables) in meiner Hook- Methode hab ich folgendes gemacht. $para = $args-\>getArgs(); $args-\>set('variables',$para); aber schon beschrieben, der Parameter ist dann null… hab ich da was falsches gemacht? zur 2. Variante: da bekomme ich einen „500 Internal Server Error“. Ich vermute mal, das durch das ersetzen (TypeReplace) eine Endlosschleife ausgelöst wird. Der Aufruf passiert ja quasi rekursiv :wink: Aber in dem Tutorial steht doch explizit, dass diese Technik u.a. zum modifizieren der Parameter gedacht ist. Wie haben denn die Entwickler sich das prinzipiell gedacht? Gruss René

Okay, das funktioniert so: $args-\>set('id',15); Wenn du die Variablen per getArgs() holst, haben die einen numerischen Key (Repräsentiert die Reihenfolge der Parameter) - bei dir müsste es also so aussehen: $para = $args-\>getArgs(); $para = para[0]; $args-\>set('variables',$para); Dann müsste es gehen!

http://www.shopware.de/wiki/_detail_615.html Habe es übrigens dort als Beispiel ergänzt!

jawoll ja… nu gehts prima :smiley: …und das bietet unglaublich viele Möglichkeiten. Ich nutze es gerade um noch ein paar zusätzliche Daten zu ermitteln, die dann in der Bestellbestätigung auftauchen sollen. ganz viel Danke :thumbup: Gruss René

Nu hole ich das Thema nochmal aus der Versenkung… wollte kein neues aufmachen, da meine Frage hier ganz gut dazu passt… Mein Problem: ich möchte die Funktion sAddArticle der Klasse sBasket modifizieren. Ich müsste dazu einen zusätzlichen Parameter übergeben in etwa so : public function sAddArticle ($id, $quantity=1, $option1=false) { Ist das mit dem Hook-System überhaupt möglich? Ich habe nu schon alles versucht, aber irgendwie ist der Parameter nicht da… Also ich habe einen Hook vom Typ TypeReplace erstellt. In der Hook-Funktion frage ich die Parameter in gewohnter Weise ab: $self = $args-\>getSubject(); $variables = $args-\>getArgs(); $id = $variables[0]; $quantity = $variables[1]; $option1 = $variables[2]; … mit $id und $quantity funktioniert das auch wie gewohnt… nur $option1 existiert einfach nicht, obwohl der im Aufruf definitiv mit übergeben wurde. Gibts da noch nen Trick, oder müsste ich das in diesem Falle nach der anderen Methode (eigene Klasse die von sBasket abgeleitet ist im Ordner …/local_old …) machen? Gruss René

Das wird so nicht gehen - da wir via Reflactor die konkrete Funktionsdefinitionen auslesen und die Parameter so mappen. Du könntest den zusätzlichen Parameter doch in eines der öffentlichen Objekte schreiben und dann dort wieder auslesen? Also beispielsweise in die Session. Oder du machst aus einem der bestehenden Parameter ein Array und übergibst dann beide Werte?

aha … danke dir! Habs nun mit der Variante Array gemacht und das funktioniert prima. In dem Zusammenhang ist mir noch was aufgefallen: In der Funktion sSaveOrder der Klasse sOrder ist m.E. noch ein kleiner Fehler in der SQL - Query wo die einzelnen Artikel in der s_order_details - Tabelle gespeichert werden. Der Bereich der Attributübergaben: ... ".$this-\>sSYSTEM-\>sDB\_CONNECTION-\>qstr((string)$basketRow["od\_attr1"]).", ".$this-\>sSYSTEM-\>sDB\_CONNECTION-\>qstr((string)$basketRow["od\_attr2"]).", ".$this-\>sSYSTEM-\>sDB\_CONNECTION-\>qstr((string)$basketRow["od\_attr3"]).", ".$this-\>sSYSTEM-\>sDB\_CONNECTION-\>qstr((string)$basketRow["od\_attr4"]).", ".$this-\>sSYSTEM-\>sDB\_CONNECTION-\>qstr((string)$basketRow["od\_attr5"]).", ".$this-\>sSYSTEM-\>sDB\_CONNECTION-\>qstr((string)$basketRow["od\_attr6"])." ... der key od_attrX existiert nicht in $basketRow - sondern ob-attrX :wink: Da ihr aber diese Attribute nicht benutzt ist das sicher nicht relevant, und ich habs für mich mit nem Hook korrigiert - so wie ichs hier gelernt habe :smiley: Gruss René

Danke, pack ich mal schnell in den Bug-Tracker :wink: