CheckboxList – hierarchická struktura
- MikeLacroix
- Člen | 60
Zdravím,
jak by se dala co nejelegantněji vytvořit hierarchická struktura checkboxů v CheckboxListu? Chtěl bych vytvořit zaškrtávání kategorií, něco takového:
[✓] Ovoce
[✓] Třešně
[✓] Hrušky
[✓] Malé
[✓] Velké
[✓] Jablka
[✓] Červená
[✓] Zelená
[✓] Zelenina
[✓] Melouny
[✓] Papriky
[✓] Červené
[✓] Zelené
[✓] Žluté
[✓] Bílé
[✓] Okurky
- GEpic
- Člen | 566
Je to jenom o vypsání checkboxů ‚vlastním‘ způsobem, řešení HTML / CSS / JS. Víc není potřeba a bylo by to zbytečné.
Viz. třeba:
https://css-tricks.com/…-checkboxes/
Editoval GEpic (7. 9. 2016 13:20)
- MikeLacroix
- Člen | 60
S html/css/js nemám problém. Problém mám s tím, jak na backendu označit, který checkbox se nachází ve které úrovni seznamu. Abych přiblížil moji situaci, nastíním, jak to mám momentálně řešeno:
Každá kategorie je reprezentována entitou, která vypadá zhruba takto:
class Category {
private $name;
private $level; // 0, pokud nemá rodiče
private $parent = null;
private $children = [];
...
}
Model vypadá (velmi zhruba) takto:
class Categories {
private $tree; // strom všech kategorií tvořený objekty Category
public function getSerialized() {
// tady se vytvoří jednorozměrné pole z $this->tree, takže vznikne něco takového:
return [
'category_id_1' => 'Zelenina',
'category_id_50' => 'Okurky',
'category_id_60' => 'Papriky',
'category_id_5' => 'Ovoce',
'category_id_42' => 'Třešně',
...
]
}
}
A ve formuláři pak něco jako:
$form->addCheckboxList('categories', 'Zvolte kategorie', $categories->getSerialized() );
Problém je, že takhle se všechny checkboxy vypíšou jakoby na stejné
úrovni. Potřebuju ke každému z nich předat nějaky data-level atribut nebo
něco takového.
Případně kdyby šlo přímo do třetího parametru metody addCheckboxList
předat vícerozměrné pole…
Editoval MikeLacroix (7. 9. 2016 14:11)