Frage zu Formularfeldern - automatisch ausfüllen

Hallo, ich habe eine Frage zur Funktion im Formularfeld. Beim Anfrage Formular wird z.B. automatisch der aktuell aufgerufene Artikel im Anfrage Feld eingefügt. Wie und wo passiert das, bzw. wie kann man das für ein eigenes Formular anwenden. Für Infos bedanke ich mich schon mal. Grüße Frank

Müsstest du mal im Controller form.php schauen - dort wird das definiert - ich denke darauf kannst du aufbauen!

Hmmm, hab mich jetzt mal durch diverse form.php gewühlt, nur scheine ich nicht die richtige zu finden.

Hat hier jemand nochnen kleinen Anstubser für mich? :shopware:

Hey, das passiert in den Zeilen 98 bis 118 in der Controllers/Frontend/Forms.php - gesteuert wird das über den Get-Parameter sInquiry - damit man dir konkreter weiterhelfen kann, müsstest du genauer beschreiben, was du dort vor hast…

1 Like

Danke Stefan, nach form[color=red]s[/color].php hatte ich nicht gesucht, du hast mir sehr weiter geholfen!

So, ich denke ich bin schon ein ganzes Stück weiter, Hintergrund der Sache ist ein eigenes Formular, welches bei den Artikeldetails eingebunden werden soll. Dazu möchte ich aber das Formular, ähnlich dem Anfrage-Formular, schon mit einem Text füllen. Das Ganze wird ja in diversen Snippets gespeichert, welche ich auch angelegt habe. Das Formular ist auch angelegt. Folgender Code in der Forms.php müßte das ja entsprechend ausgeben: public function indexAction() { if (!empty($this-\>Request()-\>Submit)){ $this-\>checkFields(); } if (empty($this-\>Request()-\>Submit) || count($this-\>Errors)){ foreach ($this-\>FormElements as $element) { if ($element["name"]=="inquiry" && !empty($this-\>Request()-\>sInquiry)){ switch ( $this-\>Request()-\>sInquiry){ case "basket": $text = Shopware()-\>System()-\>sCONFIG["sSnippets"]["sINQUIRYTEXTBASKET"]; $getBasket = Shopware()-\>Modules()-\>Basket()-\>sGetBasket(); $text = ''; foreach ($getBasket["content"] as $basketRow){ if (empty($basketRow["modus"])){ $text.= "\n{$basketRow["quantity"]} x {$basketRow["articlename"]} ({$basketRow["ordernumber"]}) - {$basketRow["price"]} ".Shopware()-\>System()-\>sCurrency["currency"]; } } if (!empty($text)) $element["value"] = $text; break; case "detail": if (!empty($this-\>Request()-\>sOrdernumber)){ $getName = Shopware()-\>Modules()-\>Articles()-\>sGetArticleNameByOrderNumber($this-\>Request()-\>sOrdernumber); $text = Shopware()-\>System()-\>sCONFIG["sSnippets"]["sINQUIRYTEXTARTICLE"]; $text .= " ".$getName; $element["value"] = $text; } break; } } $Fields[$element['id']] = Shopware()-\>Modules()-\>CmsSupport()-\>create\_input\_element($element,$this-\>Post[$element['id']]); $Labels[$element['id']] = Shopware()-\>Modules()-\>CmsSupport()-\>create\_label\_element($element); } } $this-\>View()-\>sSupport = Shopware()-\>Modules()-\>CmsSupport()-\>sSUPPORT; $this-\>View()-\>sSupport = array\_merge($this-\>View()-\>sSupport,array("sErrors"=\>$this-\>Errors,"sElements"=\>$this-\>FormElements,"sFields"=\>$Fields,"sLabels"=\>$Labels)); $this-\>View()-\>rand = md5(uniqid(rand())); if (!count($this-\>Errors) && !empty($this-\>Request()-\>Submit)){ $this-\>commitForm(); $this-\>View()-\>sSupport = array\_merge($this-\>View()-\>sSupport,array("sElements"=\>"")); } } public function commitForm(){ $mail = Shopware()-\>System()-\>sMailer; $template = Shopware()-\>Config()-\>Templates-\>sSUPPORT; $mail-\>IsHTML($template['ishtml']); Hier ist jetzt die Stelle, an der ich nicht weiter komme. Das Formular ist verlinkt, nur das Ausfüllen klappt nicht. Ich müßte für meine Zwecke diesen Abschnitt mit meinen Variablen ergänzen: if ($element[“name”]=="[color=red]inquiry[/color]" && !empty($this->Request()->s[color=red]Inquiry[/color])){ switch ( $this->Request()->s[color=red]Inquiry[/color]){ if (!empty($text)) $element[“value”] = $text; break; case “[color=red]detail[/color]”: if (!empty($this->Request()->sOrdernumber)){ $getName = Shopware()->Modules()->Articles()->sGetArticleNameByOrderNumber($this->Request()->sOrdernumber); $text = Shopware()->System()->sCONFIG[“sSnippets”][“s[color=red]INQUIRYTEXTARTICLE[/color]”]; $text .= " ".$getName; $element[“value”] = $text; } break; Wobei hier inquiry ersetzt sowie case und das Snippets mit meinen Werten gefüllt werden müssen. Ich bekomme das allerdings nicht in diese if Abfage integriert, ohne Fehlermeldung im Browser in der Zeile public function commitForm(){

Dann hast du wahrscheinlich ein } vergessen oder so - Unterhalb des letzten „breaks;“ einfügen: case "myText": if (!empty($this-\>Request()-\>sOrdernumber)){ $getName = Shopware()-\>Modules()-\>Articles()-\>sGetArticleNameByOrderNumber($this-\>Request()-\>sOrdernumber); $text = "Mein Text: Blabla Mein Artikel ".$getName; $element["value"] = $text; } break; Dann muss im Formular ein Feld mit der Bezeichnung inquiry angelegt sein - aufrufen musst du das Formular dann wie folgt: http://www.shop.de/shopware.php/Forms/I … s_Artikels Oder halt direkt im Template {url controller=forms sInquiry=myText sFid=ID sOrdernumber=$sArticle.ordernumber}

1 Like

Vielen Dank Stefan! Hast du noch einen Tip wie ich nach dem Artikel weiten Text integrieren kann? Im Link zum Formular selbst geht das mit einem 2. sInquiry ja nicht. Grüße Frank

Hmm? $text = "Mein Text: Blabla Mein Artikel “.$getName; $text .= " Noch mehr Text”;

Hehe, ja, das ist mir klar, aber ich möchte gern nach der Artikelnummer oder ähnlichem noch Text anfügen.

Text, den du über die URL übergibst oder wie? Bitte etwas umfangreicher beschreiben…

Ich möchte mal als Beispiel folgendes erreichen: Im Textfeld soll z.B. folgendes stehen: Bitte erweitern sie den “Artikel Bezeichnung” um das notwendige Zubehör, welches zum Einbau benötigt wird. Den Text vor dem Artikel lege ich ja mit meinem Snippet fest, dann kommt der Artikel als solches, wird ja auch im Link zum Formular eingebunden, nur jetzt fehlt der 2. Snippet nach dem Artikel.

Aber dann ist das Vorgehen doch genau wie von mir beschrieben? Bevor du den Text dem Element zuweißt: $element[„value“] = $text; Hängst du einfach dein Snippet hinten dran? $text = „BAUSTEIN1“.$getName.„BAUSTEIN2“;

Jetzt hab ich es, man kann hinter das $text .= " ".$getName. Shopware()-\>System()-\>sCONFIG["sSnippets"]["sMeinSnippet2"]; anfügen. Das ist dann der Text hinter dem Artikel. Und in dem Abschnitt darüber $text = Shopware()-\>System()-\>sCONFIG["sSnippets"]["sMeinSnippet1"]; wird der Text vor dem Artikel gesetzt

Ich hab dazu mal noch 2 Fragen. 1. Könnte man auch die URL des Artikels mit in das Textfeld übergeben? 2. Kann man auch an die Überschrift des Textfeldes einen Wert übergeben?