Eigene Formularfelder erstellen

An manchen Stellen ist es sinnvoll, eigene Formularfelder in TYPOlight zu integrieren.

Folgendes Beispiel: Ein Reisebüro stellt mittels eines TYPOlight Moduls eigene Reisen ins Netz. Der Endbenutzer kann im Frontend auf der Reiseübersicht eine entsprechende Reise buchen. Hierzu klickt er auf einen Button und gelangt so zu einem Kontaktformular. Im Kontaktformular soll zusätzlich zu den Benutzerangaben auch die ausgewählte Reise angezeigt werden.

Eigene Formularfelddatei erstellen

Es muss eine Formularfelddatei erstellt werden. Diese nennen wir im Beispiel FormTextFieldSetValue.php und spiele die Datei in das Verzeichnis system/module/frontend/

 1 <?php
 2 
 3 class FormTextFieldSetValue extends Widget
 4 {
 5     protected $blnSubmitInput = true;
 6 
 7     protected $strTemplate = 'form_widget';
 8 
 9     public function +set($strKey, $varValue)
10     {
11         switch ($strKey)
12         {
13             case 'maxlength':
14                 $this->arrAttributes[$strKey] = ($varValue > 0) ? $varValue : @;
15                 break;
16 
17             case 'mandatory':
18                 $this->arrConfiguration['mandatory'] = $varValue ? true : false;
19                 break;
20 
21             default:
22                 parent::+set($strKey, $varValue);
23                 break;
24         }
25     }
26 
27     public function generate()
28     {
29         if($this->Input->get('ID') != @)
30             $output = $this->SetValue($this->Input->get('ID'));
31         else
32             $output = "Bitte w&auml;hlen Sie eine Reise aus!";
33 
34         return sprintf('<input type="text" name="%s" id="ctrl_%s" class="text%s" value="%s"%s />',
35                         $this->strName,
36                         $this->strId,
37                         (strlen($this->strClass) ? ' ' . $this->strClass : @),
38                         specialchars($output),
39                         $this->getAttributes()) . $this->addSubmit();;
40     }
41 
42     private function SetValue($id) {
43         $this->import('Database');
44         $query  = "SELECT id, startdate, enddate, tourname, daytrip ";
45         $query .= "FROM tl_tour_catalog ";
46         $query .= "WHERE display = 1 AND id = ".$id."";
47 
48         $objTarget = $this->Database->execute($query)->fetchRow();
49 
50         $timespan = "(".date("d.m.Y", $objTargetr1);
51         if($objTargetr4 != '1') {
52             $timespan .= " - ".date("d.m.Y", $objTargetr2);
53         }
54         $timespan .= ")";
55 
56         return $objTargetr3." ".$timespan;
57     }
58 }
59 
60 ?>

Methode SetValue()

In der Methode SetValue(), wird ein Wert Anhand der übergebenen ID $this->Input->get('ID') aus der Datenbanktabelle ausgelesen. Die Methode SetValue() wird in der Methode generate() aufgerufen.

Vorhandene Dateien anpassen

Damit unser Formularfeld im Front- & Backend angezeigt wird, müssen folgende Dateien angepasst werden:

Es muss nach *palettes' => array_ in folgender Datei gesucht werden:

system/module/backend/dca/tl_form_field.php

Es muss folgende Codezeile wie folgt hinzugefügt werden:

'textsetvalue'     => 'name,type;label'
1     'captcha'                     => 'type;label;accesskey,class;addSubmit',
2     'submit'                      => 'type;slabel;imageSubmit;accesskey,class',
3     'textsetvalue'                   => 'name,type;label'
4 ),

Es muss nach $GLOBALS['TL_FFL'] = array in folgender Datei gesucht werden:

system/module/frontend/config/config.php?

Es muss folgende Codezeile wie folgt hinzugefügt werden:

'textsetvalue' => 'FormTextFieldSetValue'
1     'captcha'           => 'FormCaptcha',
2     'submit'            => 'FormSubmit',
3     'textsetvalue'      => 'FormTextFieldSetValue'
4 );

Formularfeld im Formular einbinden

Unser neues Formularfeld kann nun einem Formular über den Formulargenerator hinzugefügt werden.

Ich übernehme keine Haftung für evt. auftretende Fehler. Es handelt sich hierbei ausschließlich um einen Beispielcode!

--- Tutorial erstellt von Christian Barkowsky

Also available in: HTML TXT