CheckboxList – hierarchická struktura

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MikeLacroix
Člen | 60
+
0
-

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
CZechBoY
Člen | 3608
+
0
-

Jde ti o frontend nebo backend?

MikeLacroix
Člen | 60
+
0
-

Backend

GEpic
Člen | 566
+
-2
-

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
+
0
-

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)