Formularfelder über GET-Parameter in der URL vorbelegen
25.08.2010 12:25 von Jan Theofel (Kommentare: 6)
Formularefelder über die URL vorbelegen
Es ist oft eine Erleichterung für Webseitenbesucher, wenn Formulare bereits mit situationsabhängigen Werten vorbelegt sind. Beispielsweise wenn bereits das gewünschte Thema oder der richtige Ansprechpartner vorbelegt sind - jeweils abhängig von der Seite, von der aus man das Formular aufgerufen hat. Diese Anleitung beschreibt, wie dies auf einfachem Weg mittels GET-Parameter realisiert werden kann.
Benötigt:
- Erweiterung inputvar
Anleitung:
WICHTIG: Bitte bei den Insert-Tags die Leerzeichen zwischen den beiden geschweiften Klammern entfernen.
- Installieren Sie die Erweiterung inputvar.
- Öffnen Sie in dem zuvor angelegten Kontaktformular die Felder die vorbelegt werden können sollen. Tragen Sie dort unter Experten-Einstellungen/Standard-Wert ein: { {get::feldname} } (Wenn dieses Feld nicht vorhanden ist, siehe Beschreibung des Sonderfalls unten.) Dabei ist "feldname" eine eindeutige Bezeichnung des Feldes, die keine Sonderzeichen enthalten darf.
In dem folgenden Beispiel gehen wir davon aus, dass es zwei solche Felder gibt: "ansprechpartner" und "thema". - Öffnen Sie nun in dem Artikel, aus dem Sie auf ein vorbelegtes Kontaktformular verlinken möchten, das entsprechende Content-Element. Erstellen Sie im Text-Editor einen ganz normalen Link auf die Kontaktformular-Seite.
- Wechseln Sie in die HTML-Ansicht des Editors und suchen Sie dort den Link. Er sieht etwa so aus: <a href="{ {link_url::XXX} }"> (Dabei ist XXX die Contao-Id der Seite.)
- Diesen Link können Sie nun um soegenannte GET-Parameter ergänzen. Diese werden jeweils als "feldname=wert" angefügt. Der Wert darf dabei keine Sonderzeichen enthalten, auch keine Leerzeichen.
Sollten Sie Sonderzeichen benötigen, muss der Text beispielsweise hier mittels urlencode "kodiert" werden. Aus "Manfred Müller" wird dabei beispielsweise "Manfred+M%FCller".
Die erste Angabe wird am Ende der URL angehängt und durch ein ? angetrennt, die weiteren Angaben durch ein &.
Beispiel mit einem Parameter:
<a href="{ {link_url::XXX} }?ansprechpartner=Manfred+M%FCller">
Beispiel mit zwei Parametern:
<a href="{ {link_url::XXX} }?ansprechpartner=Zentrale&thema=Test"> - Wechseln Sie zurück in die normale Ansicht und speichern Sie ihre Anpassungen.
Externe Aufrufe
Auch bei externen Aufrufen kann das Formular über GET-Parameter vorbelegt werden. Diese müssen wie oben beschrieben an die ganz normale URL angehängt werden. Beispiel:
http://www.firmenbezeichnung.de/kontakt.html?ansprechpartner=Zentrale&thema=Test
Sonderfall: Felder ohne Default-Wert
Einige Feldtypen haben in Contao keine Einstellung für den Default-Wert. In diesem Fall die Anleitung von oben bis auf Schritt 2 durchführen und statt dessen:
- Ein neues Modul vom Typ "Eigener HTML-Code" anlegen.
- Dort folgen JavaScript-Code eintragen:
<script type="text/javascript"><!--
document.getElementById("ctrl_XX").value = { {get::feldname} };
--></script>
Dabei muss "ctrl_XX" durch die HTML-Id des Feldes und "feldname" durch den Feldname für den Get-Parameter (wie oben beschreiben) ersetzt werden.
Sollen mehrere derartige Felder vorbelegt werden, die mittlere Zeile für jedes Feld eintragen. - Dieses neue Modul nach dem Formular einfügen.

Einen Kommentar schreiben
Kommentar von Chris | 27.08.2010
Danke für den Tipp aber wie kann ich Felder aus z.B. ein Bestelldokument an die URL übergeben ? Beispiel ich habe eine Seite mit dem Feld Ort und diesen Ort möchte als Parameter übergeben ....
Danke für diese Infos hier.
Chris
Kommentar von Jan Theofel | 23.09.2010
Wenn auf der verlinkenden Webseite ein Formular vorhanden ist, werden die Felddaten automatisch per GET bzw. POST an die im Formular angegebene Weiterleitungsseite gesendet.
Dort können Sie dann ebenfalls per Inserttag wie oben beschrieben ausgelesen werden.
Kommentar von Hendriks | 06.10.2010
Genau nach so einer einfachen Lösung zur Formular-Vorbelegung hatte ich der Tage auch gesucht! Gedankenübertragung!
Habe ich gleich für eine Kundin implementiert. Dort geht es darum Interesse an einem Produkt (vom Link der Produktseite aus) in das Kontaktformular zu übernehmen... Klappt soweit wunderbar; auch ohne das URL-Encoding, z.B. bei "kontakt.html?produkt=CLEOPATRA Körperpackung" (also mit Umlaut und Leerzeichen in der URL).
Wo oder in welchen Fällen kann es denn mit fehlendem URL-Encoding zu Problemen kommen..? Bei bestimmten Browsern? Oder liegt es an der Server- (PHP-) Konfiguration..?
Danke für einen Hinweis dazu!
Kommentar von Jan Theofel | 07.10.2010
Ich würde das immer URL-encoden. Ob es klappt oder nicht hängt vor allem - aber nicht nur - vom Browser ab. Wenn du also sicher gehen willst, solltest du es entsprechend kodieren.
Weitere Nachteil: Sind Leerzeichen enthalten, lässt sich der Link auch nicht z.B. in eine E-Mail kopieren. Dort wäre quasi am Leerzeichen "Schluss". Ist der Link kopiert, klappt das auch problemlos.
Kommentar von Maik | 18.11.2010
Hi, vielen Dank für dieses sehr gute Tutorial. Ich hab jedoch eine Frage zur Sicherheit. Der Autor Andreas Schempp hat noch einen Hinweis zur Verwendung dieses Plugins gegeben.
Die Erweiterung soll für XSS-Angriffe "geeignet" sein? Nun will ich nicht, dass meine Seite attackiert wird. Habt ihr da ähnliche bedenken?
Viele Grüße
Kommentar von Andreas Schempp | 30.11.2010
Der Hinweis ist in erster Linie als "Absicherung" gedacht, dass man bei der Verwendung vorsichtig sein muss. Solange du nicht postRaw verwendest, sollten die Sicherheitsrisiken von Contao gefiltert werden.