Nový Nette DataGrid - uvítáte? rubrika: Programování: PHP
Zdravím všechny příznivce Nette. Udělal jsem Nette DataGrid, který je připravený pro Bootstrap 3.0 a používá se jako componenta, pouze se nahrají zdrojáky do složky vendor. Vím, že do Nette jsou už nějaké DataGridy hotové, ale tenhle toho má opravdu hodně. Nenašel jsem tam žádný, který by měl tolik funkcí, jako ten můj. Proto vlastní řešení.
Tady je DEMO: http://grid.mesour.com
Poslední odkaz v tabech je na API reference, takže si můžete prohlédnout i všechny metody a objecty, které tam jsou.
Je tam podpora i pro vypsání stromu a třeba jeho následného sortování, ale zatím jsem pro to neudělal DEMO.
Co se týče zdroje pro grid, tak je to pomocí Source. Zatím jsem připravil pouze ArraySource(array $data) a DibiSource(\DibiDataSource $data). Pro strom se pouze nastaví u source primary key a parent key a pak GridTree automaticky použije metodu fetchAssoc.
Pro všechny buttony s akcemi je tam metoda, která kontroluje, zda má uživatel práva na danou akci, řeší se to přes callback, kterému přijde v parametru Nette URL a výstup je buď FALSE nebo ta Nette URL.
Kdyby byl zájem, tak bych to celé ještě trochu poupravil, ale použití by se nezměnilo.
Chtěl bych to uvolnit hlavně protože když se na to podívá více lidí, tak třeba přijdou na lepší řešení určitého problému nebo prostě na jekékoli vylepšení :)
Ještě bych se chtěl zeptat názor, jak na vás působí to demo, zda byste po takovém gridu sáhli, z hlediska inicializace a výsledného stylu tabulky.
Edit: Tak jsem ten grid konečně dostal do fáze, kdy už by bylo možné ho zveřejnit. Mezitím jsem ho naučil ordering, odstranil jsem deprecated závislosti na Nette a sloupcům se nyní nenastavuje type, ale vytvořil jsem pro každý typ classu. Sloupce lze nastavit přes array s konstantami dané classy nebo přes její metod. Takže pro ukázku ty dva způsoby, jak může vypadat nastavení sloupce:
$name_column = new TextColumn($this); $name_column->setId('name') ->setText('Name'); $grid->column($name_column); // nebo druhá možnost $grid->column(new TextColumn($this, array( TextColumn::ID => 'name', TextColumn::TEXT => 'Group name', )));
Během tohoto týdne updatuji demo, API reference, vytvořím pro to nějakou informační stránku a zveřejním to asi pod GPL 3 a BSD licencí.
Instalace přes composer půjde, jen ještě nevím zda ho dám do centrálního repozitáře.
Jen pro info, zatím má implementovanou podporu DibiDataSource a ArrayDataSource, chci udělat i NetteDatabaseSource a časem plánuji i DoctrineDataSource ;-)
Edit 2: Tak jsem zatím updatoval demo, přidal jsem do něj ukázku výpisu stromu, inicializaci sloupců přes metody a vypnutí řazení. Odkaz na demo je nahoře v textu. Řazení nefunguje jak by mělo, protože oba DataSource mají jeden order by už v základu a je to kvůli správnému zobrazení po sortování, takže kdyby se odstranil order by odtamtud, tak by to řadilo jak má ;-) A taky není nastylované, zatím jsem nevytvořil obrázky se šipečkama, ale classy asc a desc to dostává.
Edit 3: Nakonec je hotový http://grid.mesour.com/ ;-) Jakmile se k tomu dostanu, tak ho nahraji do centrálního repozitáře composeru. http://addons.nette.org/mesour/datagrid
Edit 4: Právě jsem zveřejnil novou verzi 2.0.0 Zde info: http://forum.nette.org/cs/20448-novy-nette-datagrid-pro-bootstrap-s-mozn... Konečně už to začíná vypadat dost dobře :-)
Zdravím,
proč to dáváš sem a ne na Nette forum?
Výsledný styl je irelevantní, protože si jej lze změnit.
Jen jedna věc: Root namespace Nette bys rozhodně používat neměl.
Komentáře
- matous.nemec : OK no to bych měl :D Dík za připomínku, je tam jen FormRenderer, ale to mě nenapadlo, takhle to vypadá blbě :) — 23.3.2014
Pro zobrazení všech 6 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře