Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: Zwei Registrationsformulare auf der selben Seite und zusätzliches DIV um Captcha

  1. #1
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard Zwei Registrationsformulare auf der selben Seite und zusätzliches DIV um Captcha

    Hallo

    Kleine Frage an die Community: Ich möchte zwei Registrationsformulare (eines für Privatpersonen und eines für Firmen) auf der selben Seite platzieren. Mittels Select-Abfrage wird via Javascript entweder das eine oder andere eingeblendet. Das alles funktioniert soweit prima.

    Was mich etwas verunsichert, ist das Captcha-Feld mit der Honeypot-Funktionalität. Und zwar wird ja bei beiden Registrationsfelder jeweils unterhalb des Captcha-Feldes folgendes im Quellcode (Bsp. Formular 2) eingetragen:

    HTML-Code:
    <div style="display:none">
    <label for="ctrl_registration_hp">Do not fill in this field</label>
    <input type="text" name="c812e1461ddc8e7bc4e3a9702cc0f87bb_name" id="ctrl_registration_hp" value="">
    </div>
    <script>document.getElementById('ctrl_registration').parentNode.style.display='none';document.getElementById('ctrl_registration').value='9'</script>
    Im Template ist es wie folgt:

    PHP-Code:
      <?php if (!$this->hasErrors()): ?>
        <div style="display:none">
          <label for="ctrl_<?= $this->id ?>_hp">Do not fill in this field</label>
          <input type="text" name="<?= $this->name ?>_name" id="ctrl_<?= $this->id ?>_hp" value="">
        </div>
        <script>
          document.getElementById('ctrl_<?= $this->id ?>').parentNode.style.display = 'none';
          document.getElementById('ctrl_<?= $this->id ?>').value = '<?= $this->getSum() ?>';
        </script>
      <?php endif ?>
    Da es nun zwei Registrationsformulare sind, wird ja nur die erste gefundene ID angesteuert.

    Ein weiteres Problem ist, dass aus Layoutgründen über das p.error und input ein DIV legen möchte.

    PHP-Code:
    --> <div class="col-xs-12 col-md-8">

      <?php if ($this->hasErrors()): ?>
        <p class="error"><?= $this->getErrorAsString() ?></p>
      <?php endif; ?>

      <input type="text" name="<?= $this->name ?>" id="ctrl_<?= $this->id ?>" class="captcha mandatory<?php if ($this->class) echo ' ' $this->class?>" value="" aria-describedby="captcha_text_<?= $this->id ?>"<?= $this->getAttributes() ?>>
      <span id="captcha_text_<?= $this->id ?>" class="captcha_text<?php if ($this->class) echo ' ' $this->class?>"><?= $this->getQuestion() ?></span>

    --> </div>
    Durch das JavaScript wird dann dieses DIV (da neu parentNode von #ctrl_registration ausgeblendet, nicht aber auch das dazügehörende Label.

    Grundsätzlich kann ich wohl alles schon anpassen (z.B. individuelle IDs), weiss aber nicht, ob ich dadurch die Captcha-Funktion ausheble.

    Vielleicht kann mir da jemand eine Empfehlung abgeben, wie ich beide Probleme korrekt umgehen kann, ohne dass ich was kaputt mache.

  2. #2
    Contao-Urgestein Avatar von folkfreund
    Registriert seit
    09.04.2010.
    Beiträge
    1.928

    Standard

    Es sieht so aus, als wenn in deinem Template bereits die ID deines inputs angepasst würde ("_hp" angehängt). Im Javascript passiert das aber nicht:

    PHP-Code:
      <?php if (!$this->hasErrors()): ?> 
        <div style="display:none"> 
          <label for="ctrl_<?= $this->id ?>_hp">Do not fill in this field</label> 
          <input type="text" name="<?= $this->name ?>_name" id="ctrl_<?= $this->id ?>_hp" value=""> 
        </div> 
        <script> 
          document.getElementById('ctrl_<?= $this->id ?>').parentNode.style.display = 'none'; 
          document.getElementById('ctrl_<?= $this->id ?>').value = '<?= $this->getSum() ?>'; 
        </script> 
      <?php endif ?>
    Wahrscheinlich musst du das nur ergänzen (für das zweite Formular):

    PHP-Code:
        <script> 
          document.getElementById('ctrl_<?= $this->id ?>'_hp).parentNode.style.display = 'none'; 
          document.getElementById('ctrl_<?= $this->id ?>'_hp).value = '<?= $this->getSum() ?>'; 
        </script>

    EDIT: oh, ich glaube ich habe das völlig falsch verstanden . Du blendest mit dem Script das andere Formular aus und füllst das Captcha?
    Geändert von folkfreund (05.04.2019 um 15:54 Uhr)

  3. #3
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard

    @folkfreund

    Nope. Das "_hp"-Anhängsel ist Standard. Frage mich aber nicht, wieso wie was ;-).

    Vergiss mal das ein-/ausblenden. Das selbe Problem ist vorhanden, wenn beide Registrationsformular ganz normal auf der selben Seite eingebunden werden. Beide haben dann ein jeweiliges Captcha mit dem selben Code (PHP und JS, siehe mein zweiter Auszug).

  4. #4
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Wenn ich vielleicht einen anderen Ansatz ins Rennen werfen dürfte?

    Warum basierst Du das auf zwei Formularen? Es gibt doch conditional_select, damit kannst Du das auf Feldebene runter brechen. Also ein (1) Formular, dass eben je nach Auswahl (Privat/Firma) die entsprechenden Felder zu- oder abschaltet. Strasse z.B. sollte ja sowohl hier wie da passen.

    Das hängt aber auch daran, wie oder wo Du die Daten weiter verarbeitest.

  5. #5
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard

    Das wäre naheliegend, aber Conditional_Select kann m.E. nicht mit dem Registrationsmodul verwendet werden, oder? Ist ja kein normales Formular, das man mit dem Generator erstellen kann, sondern ein Modul. Aber könnte ich natürlich auch mit JS problemlos machen, nur selbst wenn - und das ist eigentlich der Hauptgrund, weshalb ich zwei Formular verwende: Die Felderreihenfolge ist anders.
    • Bei Firma: Firma, Strasse, PLZ, Ort, Name, Vorname, E-Mail, Passwort.
    • Bei Person: Name, Vorname, Strasse, PLZ, Ort, E-Mail, Passwort.


    Ich habe jetzt mal die ID ctrl_registration pro Registrationsformular eindeutig gemacht. Mal schauen...

  6. #6
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard

    So, also... Ich breche das Experiment ab. Vom FE-Verhalten her, hätte es gepasst, allerdings sind die Angaben nicht gesendet worden. Wie befürchtet, sind da Captcha-Template-Änderungen etwas "eingreifender". Ich mach es jetzt klassisch mit 1 Registrationsformular auf 1 Seite, denn das geht nun problemlos.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •