Checkbox: gecheckt!

Dokumentation ist alles. Wenn es keine gibt, muss man selbst tiefer tauchen und die Funktionsweise erkunden.

Bei der Programmierung für Kanboard Plugins gibt es Hilfsroutinen, um einfach (?) HTML-Form-Elemente zu erstellen. Um etwas zügiger damit arbeiten zu können, habe ich mal die am häufigsten benutzten Elemente im Trockenen ausprobiert. Einen wirklichen Hänger hatte ich dabei nur bei den Checkbox Elementen.

Einzelne Checkbox

Das ist noch relativ gradlinig und daher kaum ein Problem. Aus dem Template-Code

<?= $this->form->checkbox('no_adv', 'Wünscht keine Werbung', 1, isset($values['no_adv']) && $values['no_adv'] == '1'  ) ?>

wird HTML eingesetzt

<label><input type="checkbox" name="no_adv" class="" value="1" checked="checked"> Wünscht keine Werbung</label>

So weit, so gut, andere machen das auch so.

Mehrere Checkboxen

Dies kann verwendet werden, wenn die Optionen in einem Array abgelegt sind. Wirklich interessant, und wenn man mal weiss, wie genau es funktioniert, ist es gar nicht mal so schlecht.

Abweichungen von der Einzel-Checkbox:

$values = array (
    'beverage'=> ['beer', 'redwine'], // Nur Option 'beer' und 'redwine' sind gecheckt.
)
  • Das Feld beverage muss ein Array sein.
  • Dieses Array beverage muss nur die gecheckten Optionen enthalten, in diesem Fall ‘beer’ und ‘redwine’.

Ich kann damit mit einem Rutsch mehrere Checkboxen erstellen.

<?= $this->form->checkboxes('beverage', array(
    'water' => 'Wasser',
    'beer' => 'Bier',
    'redwine' => 'Rotwein',
    'whitewine' => 'Weisswein',
    'whisky' => 'Single Malt Whisky',
    'gin' => 'Gin',
), $values) ?>

Resultierender HTML-Code

<label><input type="checkbox" name="beverage[water]" class="" value="water" > Wasser</label>
<label><input type="checkbox" name="beverage[beer]" class="" value="beer" checked="checked"> Bier</label>
<label><input type="checkbox" name="beverage[redwine]" class="" value="redwine" checked="checked"> Rotwein</label>
<label><input type="checkbox" name="beverage[whitewine]" class="" value="whitewine" > Weisswein</label>
<label><input type="checkbox" name="beverage[whisky]" class="" value="whisky" > Single Malt Whisky</label>
<label><input type="checkbox" name="beverage[gin]" class="" value="gin" > Gin</label>

Die Daten werden als Form an den Server gepostet.

beverage[beer]    "beer"
beverage[redwine]    "redwine"
test_cbx[gamma]    "0"
beverage[water]    "0"
beverage[whitewine]    "0"
beverage[whisky]    "0"
beverage[gin]    "0"

PHP macht aus dem empfangenen Feld ein Array, bei gecheckten Optionen ist Inhalt = Index, andernfalls 0. Das ist auch der Grund, wieso 0 nicht als Index verwendet werden kann bzw. sollte.

Hier sind also “beer” und “redwine” gecheckt, die Restlichen nicht.

 ["beverage"]=> array(6) {
     ["beer"]=> string(4) "beer"
     ["redwine"]=> string(7) "redwine"
     ["water"]=> string(1) "0"
     ["whitewine"]=> string(1) "0"
     ["whisky"]=> string(1) "0"
     ["gin"]=> string(1) "0"
 }

Screenshot

Wie zuvor erwähnt, wenn man’s mal weiss …