Nový Nette DataGrid - uvítáte? rubrika: Programování: PHP

3 matous.nemec
položil/-a 19.1.2015

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 :-)

Komentáře

  • Petr Bugyík : ad "Nenašel jsem tam žádný, který by měl tolik funkcí, jako ten můj." Neodpustím si komentář :)) Jako autora https://github.com/o5/grido by mě zajímalo, co má ten tvůj navíc, abych se mohl případně přiučit ;) 28.3.2014
  • Anonym : @Petr Bugyík: mnohem hezčí. Dobrá práce. 28.3.2014
  • Anonym : @Petr Bugyík: good job 28.3.2014
  • matous.nemec : @Petr Bugyík: co kdybych chtěl mít v gridu dropdown, například přidávat na onchange itemu nějaké labely. Šlo by ve vašem gridu tohle udělat? Nebo třeba vypsání stromu nebo sortování 29.3.2014
  • rmaslo : @Petr Bugyík: Hezký. No pokud chceš nějakou inspiraci tak já mám ve svým gridu třeba ještě tyto uživatelské (klikáním nastavitelné) funkce: Prohazování pořadí a skrývání sloupců, kombinované filtrování přes víc sloupců (včetně OR a AND), kombivované řazení, agragace (suma. průměr ...) a když si to člověk takhle pracně Všechno nastaví tak má možnost to uložit {aby to příště nemusel nastavovat znova) a případně uložit jako default - pak se mu to automaticky otevírá v tomto nastavení. Časek bych chtěl udělat ještě ukotvení počátečních sloupců. Na druhou stranu - není to v Nette a je to určený spíše pro Intranety Evidečně/Ekonomického typu než pro veřejný web. 29.3.2014
  • sosvatkovi : Moc se mi to líbí. Hlavně to ajaxové řazení. Hledám něco, co by mi vypsalo strom a ty to tu slibuješ. Až to bude ke stažení, jistě bych to vyzkoušel 3.6.2014
  • matous.nemec : Dlouho jsem se sem nedostal. Vůbec nemám čas se dostat k tomu udělat nějakou dokumentaci a trochu poupravit nedostatky a věci, které tam ještě podle mě nejsou z programátorského hlediska tak úplně košér. Ale snad si v nějaké dohledné době najdu čas to připravit a rovnou pak umožnit instalaci přes composer :-) 23.7.2014
  • matous.nemec : Ne jen že to umí vypsat strom, ale umí ho i následně sortovat pomocí jQuery.ui.nestedSortable rovnou poslat na backend do handleru, který se nastaví metodě $grid->sortable('!myHandler'). Všechny potřebné Javascripty jsou součástí Gridu. Potřebuje pouze jQuery. Je to hotové, akorát jsem to ještě nepřidal do dema. 23.7.2014
odkaz
6 Michal Vyšinský
odpověděl/-a 22.3.2014

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:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.