Multicheckboxy zamiast multiselectorów w CakePHP 1.2RC2

Mając zaprojektowaną bazę danych i zdefiniowaną relację wiele-do-wielu, skrypt „bake” generuje kod strony. Relacja wiele-do-wielu przedstawiona jest jako lista „multiselect” – lista wielokrotnego wyboru. Lista ta jest o tyle niewygodna, że chcąc wybrać kilka opcji, trzeba robić to z wciśniętym przyciskiem ctrl. Jeden nieuważny ruch, przypadkowe kliknięcie i cały proces wyboru trzeba powtarzać od nowa.

Można usunąć tą niedogodność zamieniając listę wielokrotnego wyboru na listę checkboxów:

W widoku dodajemy tablicę atrybutów:

echo $form->input('Post.Tag', array('type'=>'select', 
                                    'multiple'=>'checkbox', 
                                    'options'=>$tags, 
                                    'label'=>'Tagi:'
                                                    ));

Można zmienić jeszcze kontroler, aby generował listę tagów, gdzie wartością jest nazwa tagu, kluczem natomiast jest Tag.id – identyfikator w bazie danych. Lista taka służy do tego, aby w widoku były nazwy przy checkboxach, a nie identyfikatory:

$tags = $this->Post->Tag->find('list', array('fields'=>'Tag.name'));
$this->set(compact('tags'));

Dodaj komentarz