[WIP!] Formulier

Formulier is een klasse die gebruikt kan worden om formulieren op te bouwen en te valideren. Alle bestanden gerelateerd aan Formulier zijn te vinden in lib/view/formulier. Een formulier kan een hele pagina in beslag nemen, in een smarty template voorkomen of als popup gebruikt worden.

Fields

Velden zijn te vinden in FormElement.abstract.php, FormKnoppen.class.php, GetalVelden.class.php, InvoerVelden.class.php, KeuzeVelden.class.php en UploadVelden.class.php.

FormElement

HtmlComment

Een stuk losse HTML in het formulier.

| $comment | De HTML | | ———- | ——- |

$fields[] = new HtmlComment('<strong>Dit gedeelte is belangrijk</strong>');

HtmlBbComment

Een stuk losse HTML met mogelijke BBCode in het formulier

| $comment | De HTML | | ———- | ——- |

$fields[] = new HtmlBbComment('[b]Dit gedeelte is belangrijk[/b]');

FieldSet

Het begin van een nieuwe fieldset, alle volgende elementen zitten in deze FieldSet, totdat een veld new HtmlComment('</fieldset>'); volgt.

| $titel | De titel van de fieldset | | ——– | ———————— |

$fields[] = new FieldSet('Adres');
...
$fields[] = new HtmlComment('</fieldset>');

SubKopje

Maak een subkopje aan, de standaard is <h3>. De eigenschap $h kan gebruikt worden om dit aan te passen.

| $tekst | De inhoud van de titel | | ——– | ———————- |

$subkopje = new SubKopje('Persoonlijke gegevens');
$subkopje->h = 2;
$fields[] = $subkopje;

CollapsableSubKopje

Maak een Subkopje met alles eronder collapsable, moet afgesloten worden met new HtmlComment('</div>');

   
$id De id gebruikt in de JavaScript
$titel De titel van het kopje
$collapsed = false Of het subkopje collapsed is bij laden
$single = false Of andere kopjes ook ingeklapt moeten worden
$hover_click = false Of het kopje moet uitklappen bij hover
$animate = true Of het uitklappen geanimeerd moet zijn
$fields[] = new CollapsableSubKopje('optioneel', 'Optionele gegevens', true);
...
$fields[] = new HtmlComment('</div>');

InvoerVelden

(Required)TextField

Een normaal <input type="text".../> veld.

   
$name Naam van de input, gebruikt om waarde op te halen met POST
$value Waarde van de input
$description Beschrijving, bij mouse-over
$max_len = 255 Maximale lengte van de input
$min_len = 0 Minimale lengte van de input
$model = null Ongebruikt
$fields[] = new TextField(
	'voornaam',
	'Voornaam',
	'Vul hier je voornaam in',
	255,
	2
);
$fields[] = new RequiredTextField(
	'achternaam',
	'Achternaam',
	'Vul hier je achternaam in',
	255,
	2
);

(Required)FileNameField

Zie TextField, valideert of een TextField een geldige bestandsnaam bevat.

$fields[] = new FileNameField('foto', 'Foto', 'Geef de foto een naam');
$fields[] = new RequiredFileNameField('album', 'Album', 'Geef een albumnaam');

(Required)LandField

Zie TextField, geeft suggesties voor landen: ‘Nederland’, ‘België’, ‘Duitsland’, ‘Frankrijk’, ‘Verenigd Koninkrijk’, ‘Verenigde Staten’.

$fields[] = new LandField('geboorteland', 'Geboorteland', '');
$fields[] = new RequiredLandField('land', 'Land', '');

(Required)RechtenField

Zie TextField, geeft suggesties voor specifieke rechtengroepen en valideert deze.

$fields[] = new RechtenField('maglezen', 'Mag lezen', '');
$fields[] = new RequiredRechtenField('magschrijven', 'Mag schrijven', '');

(Required)LidField

Zie TextField, geeft suggesties voor leden. Opties zijn ‘leden’, ‘oudleden’, ‘novieten’, ‘alleleden’, ‘allepersonen’, ‘nobodies’.

   
$name Naam van de input
$value Beginwaarde van de input
$description Beschrijving, bij mouse-voer
$zoekin = 'alleleden' Groep om in te zoeken
$fields[] = new LidField('lid', 'Lid', '');
$fields[] = new RequiredLidField('noviet', 'Noviet', '', 'novieten');
HtmlComment $html  
HtmlBbComment    
FieldSet    
Subkopje    
CollapsableSubKopje    
     
(Required)TextField    
(Required)FileNameField    
(Required)EntityField    
StudieField    
(Required)EmailField    
(Required)UrlField    
(Required)UsernameField    
(Required)DuckField    
(Required)TextareaField    
(Required)WachtwoordField    
(Required)WachtwoordWijzigenField    
     
(Required)IntField    
(Required)BedragField    
(Required)TelefoonField    
(Required)FloatField    
     
(Required)ColorField    
(Required)SelectField    
MultiSelectField    
(Required)EntityDropDown    
(Required)WeekdagField    
(Required)VerticaleField    
(Required)KerkField    
(Required)RadioField    
(Required)GeslachtField    
(Required)JaNeeField    
(Required)DateField    
(Required)TimeField    
(Required)CheckboxField    
(Required)DateTimeField    
(Required)SterrenField    
     
(Required)FileField    
(Required)ImageField    
BestandBehouden    
UploadFileField    
ExistingFileField    
DownloadUrlField    

Voorbeeld

class MijnForm extends Forumulier {
    function __construct(Voorbeeld $model) {
        parent::__construct($model, '/voorbeeld/', false, true);
        $fields[] = new RequiredTextField('voornaam', $model->voornaam, 'Voornaam');
        $fields[] = new TextField('achternaam', $model->voornaam, 'Achternaam');
        $fields[] = new RequiredTextField('verhaal', $model->verhaal, 'Verhaal');
        $fields['btn'] = new FormDefaultKnoppen();

        $this->addFields($fields);
    }
}
class VoorbeeldController extends Controller {
    ...

    public function voorbeeld() {
        if ($this->isPosted()) {
            $voorbeeld = new Voorbeeld();
            $voorbeeld->voornaam = filter_input(INPUT_POST, 'voornaam', FILTER_SANITIZE_STRING);
            $voorbeeld->achternaam = filter_input(INPUT_POST, 'achternaam', FILTER_SANITIZE_STRING);
            $voorbeeld->verhaal = filter_input(INPUT_POST, 'verhaal', FILTER_SANITIZE_STRING);
            $form = new MijnForm($voorbeeld);
            if ($form->validate()) {
                VoorbeeldModel::instance()->create($voorbeeld);
                MeldingUtil::setMelding("Voorbeeld met succes aangemaakt", 1);
                $this->view = new MijnForm(new Voorbeeld());
            } else {
                $this->view = $form;
            }
        } else {
            $this->view = new MijnForm(new Voorbeeld());
        }
    }
}