Klasse Formular: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(helpmessage)
(Setzen von Default Werten: Erklärung hinzugefügt)
 
(14 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Category:Module]]
+
[[Category:Dev HOWTOS]]
{{stub}}
+
[[Category:Dev Snippets]]
  
 +
 +
'''Github:''' https://github.com/psi-4ward/Formular
 +
 +
 +
 +
 +
 +
= Beispiel =
 +
 +
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:
 +
 +
<source lang="php">
 +
// Die DCA-Definition
 +
$dca = array
 +
(
 +
        'Kontaktdaten' => array
 +
        (
 +
                'label'        => 'Ihre Kontaktdaten',
 +
                'inputType'    => 'headline'
 +
        ),
 +
        'vorname' => array
 +
        (
 +
                'label'        => 'Vorname',
 +
                'inputType'    => 'text',
 +
                'default'      => 'vorname',
 +
                'eval'          => array('mandatory'=>true,'helpmessage'=>'Ihr Vorname')
 +
        ),
 +
        'nachname' => array
 +
        (
 +
                'label'        => 'Nachname',
 +
                'inputType'    => 'text',
 +
                'default'      => 'nachname',
 +
                'eval'          => array('mandatory'=>true,'helpmessage'=>'Ihr Nachname')     
 +
        ),
 +
        'datum' => array
 +
        (
 +
                'label'        => 'Datum',
 +
                'inputType'    => 'text',
 +
                'default'      => date('d.m.Y'),
 +
                'eval'          => array('datepicker'=>$this->getDatePickerString(),'cleardefault'=>false)     
 +
        ),
 +
 +
        'email' => array
 +
        (
 +
                'label'        => 'E-Mail',
 +
                'inputType'    => 'text',
 +
                'eval'          => array('mandatory'=>true,'rgxp'=>'email')           
 +
        ),
 +
        'telefon' => array
 +
        (
 +
                'label'        => 'Telefon',
 +
                'inputType'    => 'text',
 +
                'eval'          => array('mandatory'=>true)           
 +
        ),
 +
        'kategorie' => array
 +
            (
 +
                'label'        => 'Kategorie',
 +
                'inputType'    => 'checkbox',
 +
                'options'      => array('Option1','Option2','Option3','Option4'),
 +
                'eval'          => array('multiple' => true, 'mandatory' => true),
 +
        ),
 +
        'land' => array
 +
        (
 +
                'label'        => 'land',
 +
                'inputType'    => 'select',
 +
                'options'      => array('1','2','3','4'),
 +
                'reference'    => array('1'=>'Peru','2'=>'Kenia','3'=>'Italien','4'='Kamerun'),
 +
                'eval'          => array('multiple' => true, 'mandatory' => true),
 +
        ),
 +
        'bemerkung' => array
 +
        (
 +
                'label'        => 'Bemerkung',
 +
                'inputType'    => 'textarea',
 +
                'eval'          => array('rte'=>'tinyMCE')
 +
        ),
 +
        'submit' => array
 +
        (
 +
                'label'        => 'speichern',
 +
                'inputType'    => 'submit'
 +
        )
 +
);
 +
 +
// Instantierung mit der FormularID meinKontaktformular
 +
$frm = new Formular('meinKontaktformular');
 +
 +
// Übergabe des DCA-Arrays
 +
$frm->setDCA($dca);   
 +
 +
// Konfiguration
 +
$frm->setConfig('generateFormat','<div>%label %field %error </div>');
 +
$frm->setConfig('attributes',array('tableless'=>true));
 +
 +
// Formular wurde abgeschickt und ist korrekt
 +
if($frm->isSubmitted() && $frm->validate())
 +
{
 +
        var_dump($frm->getData());
 +
}
 +
 +
// Ausgabe des Formulars
 +
echo $frm->parse();
 +
</source>
 +
 +
=Konfiguration=
 +
 +
Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen.
 +
Grundlegend muss zwischen '''parse()''' und '''generate()''' unterschieden werden, wobei parse() die Methode generate() impliziert.
 +
Formular::parse() bettet den Output von generate() in das ''Template'' ein.
 +
 +
==Parameter==
 +
Die Konfiguration der Klasse Formular kann über '''Formular::setConfig($param,$value)''' geändert werden.
 +
 +
* str '''formTemplate''': Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form
 +
* str '''class''':  Zusätzliche Klassenangabe
 +
* str '''action''': action-Attribut des <form> Tags. Vorgabe: Environment->request
 +
* str '''method''': method-Attribut des <form> Tags. Vorgabe: post
 +
* str '''generateFormat''': String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe "%parse"
 +
            %parse Widget::parse()
 +
            %label Widget::generateLabel()
 +
            %field Widget::generate()
 +
            %error Widget::getErrorAsHTML()
 +
            %errorPlain Widget::getErrorAsString()
 +
* array '''attributes''': Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=>true)
 +
 +
===Setzen von Default Werten===
 +
 +
Um bei Select-, Radio-, Checkbox-Feldern die Standardwerte vorzubelegen kann man sich dem Magical-Setter bedienen:
 +
 +
Beispiel:
 +
<source lang="php">
 +
$frm->kategorie = array('Option1','Option2');
 +
</source>
 +
 +
kategorie ist der Name des Feldes. Das übergebene Array sind die als Standard anzunehmenden Werte aus dem Array options dieses Feldes.
 +
 +
===Anwendungsbeispiel Filter===
 +
 +
Will man einen mehrseitigen Filter mit der Klasse Formular erstellen und die Kriterien beim Blättern (Pagination) erhalten, kann man diese über get paramater (hinzugefügt über addToUrl()) wieder setzen:
 +
<source lang="php">
 +
        $frm->kategorie = \Input::get('kategorie');
 +
        $frm->branche = \Input::get('branche');
 +
        $frm->bundesland = \Input::get('bundesland');
 +
</source>
 +
 +
==Systemweite Konfiguration==
 +
Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.
 +
<source lang="php">
 +
$GLOBALS['TL_FORM'] = array
 +
(
 +
  'class'            =>'myFormular',
 +
  'generateFormat'  => '<div class="formField">%label %error %field</div>',
 +
  'formTemplate'    => 'myFormularTemplate'
 +
)
 +
</source>
  
 
=Interaktion mit Erweiterungen=
 
=Interaktion mit Erweiterungen=

Aktuelle Version vom 8. März 2016, 09:02 Uhr


Github: https://github.com/psi-4ward/Formular



Beispiel

Die Klasse Formular erstellt Formulare aus DCA-Arrays:

// Die DCA-Definition
$dca = array
(
        'Kontaktdaten' => array
        (
                'label'         => 'Ihre Kontaktdaten',
                'inputType'     => 'headline'
        ),
        'vorname' => array
        (
                'label'         => 'Vorname',
                'inputType'     => 'text',
                'default'       => 'vorname',
                'eval'          => array('mandatory'=>true,'helpmessage'=>'Ihr Vorname')
        ),
        'nachname' => array
        (
                'label'         => 'Nachname',
                'inputType'     => 'text',
                'default'       => 'nachname',
                'eval'          => array('mandatory'=>true,'helpmessage'=>'Ihr Nachname')       
        ),
        'datum' => array
        (
                'label'         => 'Datum',
                'inputType'     => 'text',
                'default'       => date('d.m.Y'),
                'eval'          => array('datepicker'=>$this->getDatePickerString(),'cleardefault'=>false)      
        ),
 
        'email' => array
        (
                'label'         => 'E-Mail',
                'inputType'     => 'text',
                'eval'          => array('mandatory'=>true,'rgxp'=>'email')             
        ),
        'telefon' => array
        (
                'label'         => 'Telefon',
                'inputType'     => 'text',
                'eval'          => array('mandatory'=>true)             
        ),
        'kategorie' => array
            (
                'label'         => 'Kategorie',
                'inputType'     => 'checkbox',
                'options'       => array('Option1','Option2','Option3','Option4'),
                'eval'          => array('multiple' => true, 'mandatory' => true),
        ),
        'land' => array
        (
                'label'         => 'land',
                'inputType'     => 'select',
                'options'       => array('1','2','3','4'),
                'reference'     => array('1'=>'Peru','2'=>'Kenia','3'=>'Italien','4'='Kamerun'),
                'eval'          => array('multiple' => true, 'mandatory' => true),
        ),
        'bemerkung' => array
        (
                'label'         => 'Bemerkung',
                'inputType'     => 'textarea',
                'eval'          => array('rte'=>'tinyMCE')
        ),
        'submit' => array
        (
                'label'         => 'speichern',
                'inputType'     => 'submit'
        )
);
 
// Instantierung mit der FormularID meinKontaktformular
$frm = new Formular('meinKontaktformular');
 
// Übergabe des DCA-Arrays
$frm->setDCA($dca);     
 
// Konfiguration
$frm->setConfig('generateFormat','<div>%label %field %error </div>');
$frm->setConfig('attributes',array('tableless'=>true));
 
// Formular wurde abgeschickt und ist korrekt
if($frm->isSubmitted() && $frm->validate())
{
        var_dump($frm->getData());
}
 
// Ausgabe des Formulars
echo $frm->parse();

Konfiguration

Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen. Grundlegend muss zwischen parse() und generate() unterschieden werden, wobei parse() die Methode generate() impliziert. Formular::parse() bettet den Output von generate() in das Template ein.

Parameter

Die Konfiguration der Klasse Formular kann über Formular::setConfig($param,$value) geändert werden.

  • str formTemplate: Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form
  • str class: Zusätzliche Klassenangabe
  • str action: action-Attribut des <form> Tags. Vorgabe: Environment->request
  • str method: method-Attribut des <form> Tags. Vorgabe: post
  • str generateFormat: String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe "%parse"
           %parse Widget::parse()
           %label Widget::generateLabel()
           %field Widget::generate()
           %error Widget::getErrorAsHTML()
           %errorPlain Widget::getErrorAsString()
  • array attributes: Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=>true)

Setzen von Default Werten

Um bei Select-, Radio-, Checkbox-Feldern die Standardwerte vorzubelegen kann man sich dem Magical-Setter bedienen:

Beispiel:

$frm->kategorie = array('Option1','Option2');

kategorie ist der Name des Feldes. Das übergebene Array sind die als Standard anzunehmenden Werte aus dem Array options dieses Feldes.

Anwendungsbeispiel Filter

Will man einen mehrseitigen Filter mit der Klasse Formular erstellen und die Kriterien beim Blättern (Pagination) erhalten, kann man diese über get paramater (hinzugefügt über addToUrl()) wieder setzen:

        $frm->kategorie = \Input::get('kategorie');
        $frm->branche = \Input::get('branche');
        $frm->bundesland = \Input::get('bundesland');

Systemweite Konfiguration

Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.

$GLOBALS['TL_FORM'] = array
(
   'class'            =>'myFormular',
   'generateFormat'   => '<div class="formField">%label %error %field</div>',
   'formTemplate'     => 'myFormularTemplate'
)

Interaktion mit Erweiterungen

cleardefault

Cleardefault löscht den Standardwert sobald das Textfeld den Fokus bekommt. Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein einzelnes Feld angepasst werden:

$dca = array(
    'datum' => array
    (
        'label'      => 'Datum',
        'inputType'  => 'text',
        'default'    => date('d.m.Y'),
        'eval'       => array('cleardefault'=>false)      
    )
);

'cleardefault'=>false deaktiviert das Löschen des Standardwertes für das Feld datum.

helpmessage

Helpmessage blendet per Javascript Hilfsnachrichten für das Feld ein. Die Nachricht wird im eval Array hinterlegt. Falls über die Klasse FormularTL_DCA eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.

$dca = array(
    'datum' => array
    (
        'label'      => 'Datum',
        'inputType'  => 'text',
        'default'    => date('d.m.Y'),
        'eval'       => array('helpmessage'=>'Das Datum muss im Format DD.MM.YYYY sein')
    )
);


formcheck

Formcheck validiert ein Formular per Javascript auf der Clientseite. Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.

Ansichten
Meine Werkzeuge

Contao Community Documentation

<user> Kann es sein, dass sich SyncCto bei Sync->Client anders verhält als umgegekehrt also Sync->Server ?
<xtra> ja, da laufen die Daten in die andere Richtung *scnr*

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge