JsTree – komponenta pro editaci stromových struktur

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

JsTree

demo
download

Komponenta pro editaci stromových struktur typu id – parentId. Pro funkčnost je potřeba jQuery a pluginu JsTree.

Příklad použití
	public function createComponentTree()
	{
		$tree = new JsTree();
		$tree->table = "menu";  // jméno tabulky, s kterou bude pracovat
		$tree->titleColumn = "text"; // jméno sloupce pro titulek
		$tree->orderColumn = "order"; // jméno sloupce pro pořadí
		$tree->numberingFrom = 1;
		$tree->parentColumn = "depend";
		$tree->where = array(array("`web`=%i", WEB)); // je možné navěsit podmínky
		$tree->defaultValues = array("web"=>WEB);
		$tree->enableContextmenu = true;
		$tree->enableDragDrop = true;
		$tree->showRoot = true;
		$tree->enableCheckbox = true; // zobrazení checkboxů
		$tree->checkboxColumn = "checked"; // sloupec, který ovlivňuje stav checkboxu
		$tree->onAfterUpdate[] = callback($this, "updateUrl");
		$tree->onAfterCreate[] = callback($this, "updateUrl");
		$tree->onClick[] = callback($this, "handleClick");
		$tree->openAll = true;
		return $tree;
	}
despiq
Člen | 320
+
0
-

pekne

Lopo
Člen | 277
+
0
-

jedna rypava:

v com je to lepsie oproti EditTree ?

ak pominiem fakt ze EditTree je len nadstavba nad TreeView …

mam dojem ze toto ma o dost tazsiu integraciu do sablony – zbytocne moc veci sa riesi az v sablone, aj ked niekomu to moze takto vyhovovat ale osobne do sablony prenasam co najmenej veci a vacsinu sa snazim riesit v presenteri

pepakriz
Člen | 246
+
0
-

Pozoruju nekonzistenci struktury při manipulaci z více míst. S tím bude asi trochu problém.

cubic
Člen | 45
+
0
-

Opravil jsem si ukládání pořadí při přesunu, které v některých případech nefungovalo. Teď už to snad funguje, jak má. Jedná se o pár řádků v metodě handleSaveData(), kdyby se to někomu hodilo, tak:

...
			if($this->enableDragDropOrder){
				$old = dibi::query("SELECT * FROM `{$this->table}` WHERE `{$this->keyColumn}`=%i", $id)->fetch();
                                dibi::query("UPDATE `{$this->table}` SET `{$this->orderColumn}` = `{$this->orderColumn}`-1 WHERE `{$this->parentColumn}` = %i ", $old->{$this->parentColumn}, " AND `{$this->orderColumn}` > %i", $old->{$this->orderColumn});
                                dibi::query("UPDATE `{$this->table}` SET `{$this->orderColumn}` = `{$this->orderColumn}`+1 WHERE `{$this->parentColumn}` = %i ", $ref, " AND `{$this->orderColumn}` >= $i ", $position);
                                dibi::query("UPDATE `{$this->table}` SET `{$this->parentColumn}` = %i", $ref, ", `{$this->orderColumn}` = %i", ($position), " WHERE `{$this->keyColumn}` = %i", $id);
			}

			$this->onAfterMove($id);
...

Editoval cubic (12. 9. 2010 16:06)