Insert a Captcha

Wichtig: Dieses Tutorial setzt voraus, dass die Extension 'jm_recaptcha' vorhanden und installiert ist.

1. Marker in Prozessschritt einfügen

Damit das Captcha an der richtigen Stelle im Prozessschritt angezeigt wird, erstelen wir ein HTML-Objekt mit einer ungefähren Größe des Captchas, in diesem Beispiel 108x422px. Anschließend fügen wir einen Marker mit dem Wert '###CAPTCHA###' in diesem Objekt ein.

Anschließend sollte das Ganze wie folgt aussehen:

Marker im Editor

Wenn man den Prozess nun betrachtet, müsste es so aussehen:

Marker im Prozess

2. PHP Klasse erstellen

Um ein Captcha verwenden zu können, muss Businesslogik an zwei unterschiedlichen Stellen aufgerufen werden. Zunächst muss vor der Darstellung das Captcha geladen werden und nach dem Absenden, bei der Validierung, das Captcha geprüft werden und ggf. eine Fehlermeldung zurück gegeben werden.

Es wurde eine Datei "example.php" angelegt, die die Klasse "Example" enthält. Darin befinden sich die Methoden "execute_prestep" und "execute_validation" (alle Namen können willkürlich gewählt werden). Der Inahlt der Datei ist wie folgt aufgebaut:

  1. <?php
  2. require_once(t3lib_extMgm::extPath('jm_recaptcha').'class.tx_jmrecaptcha.php');
  3.  
  4. class Example {
  5.  
  6. public function execute_prestep($processId, $pre_stepid, $cur_stepid,
  7. $sessiondata, $htmlcode, $prestepdata) {
  8.  
  9. // captcha
  10. $recap = new tx_jmrecaptcha();
  11.  
  12. // replace marker
  13. $htmlcode = str_replace('###CAPTCHA###', $recap->getReCaptcha(), $htmlcode);
  14.  
  15. // return new html code via command
  16. $command['replaceHTML']['htmlCode'] = $htmlcode;
  17.  
  18. return array($command);
  19. }
  20.  
  21. public function execute_validation($processId, $preStepId,
  22. $curStepId, $session, $html) {
  23.  
  24. $commands = array();
  25.  
  26. /* captcha validation */
  27. $recap = new tx_jmrecaptcha();
  28.  
  29. $status = $recap->validateReCaptcha();
  30. if (!$status['verified']) {
  31. $command = array();
  32. $command['addError']['errorObjId'] = 'html1';
  33. $command['addError']['message'] = "Bitte geben Sie die
  34. richtige Zeichenfolge im Bild ein.";
  35. $commands[] = $command;
  36. }
  37.  
  38. return $commands;
  39. }
  40. }
  41. ?>

In der Businesslogik haben wir die ID des Objektes angegeben an dem die Fehlermeldung angezeigt werden soll. Im oberen Beispiel haben wir die ID 'html1' verwendet was der CSS ID unsere HTML Objektes entspricht.

2. Businesslogik aufrufen (Marker ersetzen)

Zunächst soll der Marker durch das Captcha ersetzten werden. Hierzu wird die Businesslogik wir folgt aufgerufen:

Aufruf der Businesslogik

Nun muss noch die Businesslogik mit dem entsprechende Prozessschritt (in unserem Fall dem ersten) verknüpft werden, siehe Kapitel "Businesslogik aus positionIt ausführen (Punkt 4)".

3. Zwischenergebnis betrachten

Daraufhin sollte der Marker durch das Captcha ersetzt worden sein:

Captcha wird dargestellt

4. Businesslogik aufrufen (Validierung)

Damit das Captcha auch validiert wird, wird die Businesslogik wie folgt aufgerufen:

Aufruf der Businesslogik

Nun muss noch die Businesslogik mit dem entsprechende Prozessschritt (in unserem Fall dem ersten) verknüpft werden, siehe Kapitel "Businesslogik aus positionIt ausführen (Punkt 4)".

5. Ergebnis betrachten

Wenn alle Schritte richtig durchgeführt wurden, und das Formular ohne Angabe der Zeichenfolge im Captcha abgeschickt wird, muss folgende Fehlermeldung erscheinen:

Fehlermeldung
© 2017 Ososoft GmbH