Contao-Anleitungen.de > Blogpost lesen

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:

Anleitung:

WICHTIG: Bitte bei den Insert-Tags die Leerzeichen zwischen den beiden geschweiften Klammern entfernen.

  1. Installieren Sie die Erweiterung inputvar.
  2. Ö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".
  3. Ö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.
  4. 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.)
  5. 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">
  6. 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:

  1. Ein neues Modul vom Typ "Eigener HTML-Code" anlegen.
  2. 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.
  3. Dieses neue Modul nach dem Formular einfügen.

Zurück

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.