Multiple Checkboxen mit Pears QuickForm

Auch mit dem QuickForm Modul von Pear lassen sich mehrere Checkboxen in einer Gruppe bauen. Was eigentlich auch nicht so schwer sein sollte. Schwerer wird es erst, wenn man die Checkboxen in einem Formular wieder anzeigen möchte.
Ich mache es immer so, dass die gespeicherten Werte als serialisiertes Array in der Datenbank gespeichert wird. Außerdem habe ich noch ein Array mit allen möglichen Werten.

Das Array mit allen auszuwählenden Punkten sieht so aus:


print_r($allCheckboxValues);

Array
(
[0] => Array
(
[id] => 1
[value] => Wert1
)

[1] => Array
(
[id] => 2
[value] => Wert1
)
[2] => Array
(
[id] => 3
[value] => Wert3
)
)

und das mit den gespeicherten Werten so.


print_r($myCheckboxValues);

Array
(
[0] => 1
[2] => 1
)

Nun brauchen wir zwei foreach Schleifen, um zum Einen das Array mit den gesamten Checkboxen durchzugehen und innerhalb derer meine gepeicherten Werte als ‘checked’ zu markieren.


$checkboxen = array();
$checkobj     = array();
foreach($allCheckboxValues as $h => $ValueAll){
$checkobj = HTML_QuickForm::createElement('checkbox', $h ,null , $ValueAll['value']);
foreach ($myCheckboxValues as $Key => $ValueMy) {
if($ValueAll['id'] == $Key){
$checkobj->setChecked(true);
}
}

$checkboxen[] = $checkobj;
}
$form->addGroup($checkboxen, 'categ', $_lang['daten']['Checkboxen'], '', true);

So weit so schön.

Rendern sollten wir noch:


$renderer->setGroupElementTemplate('{label}<li>{element}</li>','CheckGrp');
$renderer->setElementTemplate('<ul><h4>{label}</h4><li>{element}</li></ul>','CheckGrp');

Wenn jetzt alle checkboxen markiert sind, ist der Name der gerenderten Gruppe nicht richtig.

Das Ergebnis nach dem Speichern wird dann wieder als ein serialisiertes Array in der DB gespeichert:

function updateData($val){
$check = serialize($val['value']);
}

Comments

  1. Great article very important information i found here

    Posted by pKKmkct

    Link | Juni 1st, 2010 at 14:48

Leave Your Comment