Nový Nette DataGrid pro Bootstrap s možností vypsat strom

mesour
Nette Blogger | 236
+
+7
-

Nadpis mluví za vše, asi není potřeba další popis. Vše potřebné je v dokumentaci/demu.

Nette 2.4

Pro Nette 2.4 stahujte verzi ~2.4.0, pro nižší verze je to pak ~2.0.7

Důležité!

Vytvořil jsem novou diskusi k verzi gridu 3.0: https://forum.nette.org/…om-pro-nette zde prosím pište pouze o Verzi 2 :)

Editoval mesour (17. 8. 2016 21:57)

Jan Suchánek
Člen | 404
+
0
-

@mesour: Pěkný, půjde i bez dibiDataSource?

mesour
Nette Blogger | 236
+
0
-

Jak to myslíš bez DibiDataSource? Nějaký DataSource se mu poslat musí, je tam ještě ArrayDataSource a plánuji udělat DataSource pro NetteDatabase, ale nevím jak rychle se k tomu dostanu.

mesour
Nette Blogger | 236
+
0
-

Upgradoval jsem pager. Celou componentu pageru jsem překopal a vnitřek jsem úplně změnil (to co tam bylo bylo ještě z úplně prvního DataGridu a chtělo to už změnit) + jsem použil Nette\Utils\Paginator.

Metoda pagerUrl(‚Presenter:action‘) je nyní deprecated a nahradila jí metoda enablePager(), která je už bez parametru, takže není potřeba nastavovat nějakou URL.

Zatím se v pagerUrl() bude volat $this->enablePager() a tak za měsíc do toho hodím vyhazování vyjímky, něco jako „Method pagerUrl is deprecated, use enablePager instead.“.

  • Až budu mít trochu víc času, tak přidám pageru vlastnost, že bude přidávat „…“ pokud tam bude fakt hodně stránek.

Tyhle změny jsou již v repozitáři, takže stačí updatovat. Demo je už updatované.

Do budoucna plánuji přidat NetteDatabaseDataSource, jak už jsem psal a také bych chtěl celý Grid pokrýt testy. Nebudu slibovat žádný termín, protože nevím, jak na to budu mít čas.

castamir
Člen | 629
+
0
-

Nějak mi v demu blbne řazení… něco se řadí něco ne…

Tirus91
Člen | 199
+
0
-

Nejde místo těch akčních tlačítek editace a smazání tam dát Dropdown? Šlo by to nějak propojit s LeanMapperem? (ber to jako otázku před tím, než začnu hrabat do kódu – abych se v něm nehrabal zbytečně).

mesour
Nette Blogger | 236
+
0
-

Můžeš použit TextColumn a nastavit mu callback, který bude vracet HTML dropdownu nebo můžeš rovnou vracet vykreslenou componentu.

LeanMapper nepoužívám, ale když je postavený na Dibi, tak by mohl vratit výsledek jako DibiDataSource, to by teoreticky melo jít ne?

Časem bych mohl přidat třeba dropdownColumn, ale ted mám hodne jiné prace. Přemýšlel jsem i o imageColumnu, ale tohle všechno se da řešit pres callback, tak nevím zda to bude potřeba, možná to tam pak přidam pro pohodlí :-)

EDIT: Ještě mě napadlo, že si můžeš napsat vlastní column, pouze ho podědit od BaseColumnu a dát mu nastavení/metody, které potřebuješ. V metodě createHeader vrátíš hlavičku pro column a v createBody tělo pro každý řádek. Můžeš se inspirovat v TextColumnu.

Tirus91 napsal(a):

Nejde místo těch akčních tlačítek editace a smazání tam dát Dropdown? Šlo by to nějak propojit s LeanMapperem? (ber to jako otázku před tím, než začnu hrabat do kódu – abych se v něm nehrabal zbytečně).

Editoval mesour (8. 9. 2014 13:33)

mesour
Nette Blogger | 236
+
0
-

Podívám se na to, ale bude to chybka v Demu, nikoliv v Gridu. Je také možné, že jsi měl zapnuté řazení a to by teoreticky mohlo ovlivnit následný výpis.

EDIT: Upravil jsem to tak, že všude lze řadit, pouze na stránce Sortable a Tree je řazení vypnuté a na DataSource je nastaveno řazení natvrdo podle sloupce sort, kde jsou hodnoty pro sortování. Z toho vyplývá, ža pokud se použije sortable, tak je dobré vypnout řazení, aby v tom nevznikl zmatek.

castamir napsal(a):

Nějak mi v demu blbne řazení… něco se řadí něco ne…

Editoval mesour (8. 9. 2014 17:29)

mesour
Nette Blogger | 236
+
0
-

Přidal jsem NetteDbDataSource. Příklad použití:

$selection = $nette_db_context->table('user');

$source = new \DataGrid\NetteDbDataSource($selection); //omezení na \Nette\Database\Table\Selection

$grid = new \DataGrid\Grid($source, $presenter, $name);
//...
mesour
Nette Blogger | 236
+
0
-

Přidal jsem tři nové columny:

ImageColumn, demo: http://grid.mesour.com/column/image/
DateColumn, demo: http://grid.mesour.com/column/date/
NumberColumn, demo: http://grid.mesour.com/column/number/

Také jsem Grid fixnul pro Nette 2.2, zjistilo se, že vyhazoval jednu exception kvůli změně v latte :-)

Během víkendu se snad dostanu k DropdownColumnu ;-)

Editoval mesour (25. 9. 2014 16:15)

mesour
Nette Blogger | 236
+
0
-

Začal jsem číslovat verze a udělal jsem novou verzi 1.1, tady jsou změny: http://grid.mesour.com/versions/#1.1

Také jsem umožnil vytvářet dropdowny a buttony úplně mimo DataGrid. Dobré je, že se zobrazují podle toho, zda má uživatel práva na danou akci nebo handler, tady je ukázka nastavení permissions callbacku: http://grid.mesour.com/permission/. Do parametru callbacku přijde URL, takže třeba „Homepage:“ nebo „testCallback!“, případně třeba „google.com“ při nepoužití Nette URL.

Také je zde ten slibovaný DropdownColumn: http://grid.mesour.com/…mn/dropdown/

Klainer
Člen | 42
+
0
-

Dobrý den,
děkuji autorovi za super grid !
Chtěl bych se zeptat, zda je v plánu /nebo zda nemá někdo v plánu udělat datasource i pro Doctrine ? Rád bych si ho udělal sám ovšem moc mi to nejde.

Děkuji.

FJP
Člen | 124
+
0
-

Ahoj, vypadá to moc pěkně.

Jen maličký detail: v tom demíčku mi nějak blbne scrollování (musím vždycky resiznout okno, abych mohl scrollovat na bottom stránky, ve FF i Chrome).

Editoval FJP (24. 9. 2014 15:53)

mesour
Nette Blogger | 236
+
0
-

Dobrý den,

datasource pro Doctrine je v plánu. Snad během týdne bych se k tomu mohl dostat nebo to nějak zařídit :-)

Klainer napsal(a):

Dobrý den,
děkuji autorovi za super grid !
Chtěl bych se zeptat, zda je v plánu /nebo zda nemá někdo v plánu udělat datasource i pro Doctrine ? Rád bych si ho udělal sám ovšem moc mi to nejde.

Děkuji.

mesour
Nette Blogger | 236
+
0
-

Ahoj,

díky jsem rád, že se líbí :-)

V demu jsem měl použitý jQuery scroller. Když jsou s tím problémy, tak jsem ho odstranil a je tam nyní nativní scroller, takže už nebude problém :-)

FJP napsal(a):

Ahoj, vypadá to moc pěkně.

Jen maličký detail: v tom demíčku mi nějak blbne scrollování (musím vždycky resiznout okno, abych mohl scrollovat na bottom stránky, ve FF i Chrome).

mesour
Nette Blogger | 236
+
+2
-

Zdravím, přidal jsem možnost inline editace, tady je k tomu demo:

http://grid.mesour.com/editable/

Časem až se k tomu dostanu, tak to ještě rozšířím, například column\Date bude mít jquery.ui datepicker a přidám validaci na číslo u column\Number. Zatím je potřeba mít vlastní validaci na backendu a případně nastavit flashMessage a dát redrawControl, aby se vykreslily.

Také jsem přemýšlel že by DataGrid mohl mít nějaký interní handler, na který by to chodilo a do setEditableUrl by se nenastavovala URL, ale rovnou callback. Grid by pak rovnou mohl kontrolovat, zda má daný sloupec povolenou editaci a tak dále :)

Bohužel jsem to potřeboval do jednoho projektu, tak jsem zatím udělal takovou základní zjednodušenou verzi.

mesour
Nette Blogger | 236
+
+2
-

Udělal jsem verzi 1.2, ve které jsem přidal export do csv: http://grid.mesour.com/export/

Změnilo se nastavení sortable a editable, posílá se jen callback místo linku a chodí do něj pěkná data, nic se nemusí tahat z postu. Navíc akorát přibylo posílání httpRequestu z presenteru do Gridu. Metody, které ho potřebují si řeknou o jeho nastavení pomocí exceptiony.

Editable u Number columnu má JS validaci na číslo a Date column má datetimepicker. Také při odeslání dat interní handler kontroluje, zda je povolena na daném sloupci editace. Když jsou post data podvržená, vyhodí vyjímku.

Nicméně, tady jsou změny: http://grid.mesour.com/versions/#1.2

Také jsem fixnul: u Dropdownu se v atributech linku nenahrazovalo id z dat viz id ⇒ ‚{user_id}‘. Je to opravené od verze 1.0, ve které jsem dropdown přidal.

Díky všem, kteří mi píší do emailu bugy. V nejbližší době to přesunu na GitHub, aby bylo možné přidávat issues :)

mpis
Člen | 65
+
+4
-

Velké díky za tento perfektní grid. Neuvěřitelně rychle dozrává.
Obrovský hlubokosklon autorovi.
Ale co bych chtěl maximálně vyzdvihnout, je dokumentace na autorových stránkách. Je to precizní práce, která přinese všem uživatelům, ale hlavně těm, kteří s Nette teprve začínají, úsporu času a hlavně nervů.
Z toho, jak je tato dokumentace zpracovaná, by se měli poučit všichni spolutvůrci Nette a doplňků do Nette.
Kdyby totiž byla dokumentace k Nette zpracovaná přesně tímto způsobem, stal by se z Nette absolutně bezkonkurenční produkt. Takto je to pouze téměř bezkonkurenční produkt, který díky nedokonalé dokumentaci odrazuje spoustu začátečníků.

newPOPE
Člen | 648
+
0
-

Presun to pls na github.

mesour
Nette Blogger | 236
+
+1
-

Je to na GitHubu: https://github.com/mesour/DataGrid
A taky zde: https://packagist.org/…our/datagrid

Takže už se instaluje přes composer jen pomocí: „mesour/datagrid“: „1.2“ :-)

Editoval mesour (3. 10. 2014 13:59)

mesour
Nette Blogger | 236
+
+1
-

Info:

Dnes 3.10. kolem 18:00 nebude dostupné demo na ± hodinu.

mesour
Nette Blogger | 236
+
+1
-

Přidal jsem novou verzi 1.3, tady jsou změny: http://grid.mesour.com/versions/#1.3

Je tam dost změn v API, změny namespaců a inicializací. Chápu, že je to dost blbé, ale z hlediska správnosti názvů to bylo nevyhnutelné. Tohle API chci udržet nějakou delší dobu i když se možná nějaký malým změnám nevyhnu, ale budu to dělat tak, že minimálně do verze 2.0 bude API zpětně kompatibilní s verzí 1.3.

Co asi dost uvítáte je pager při více datech: http://grid.mesour.com/…anced-pager/ s možností přejít na konkrétní stránku. Pager lze i nastavit. Blbé je, že je nyní závislý na http requestu. Tuhle závislost chci do příští verze odstranit. A http request se nebude muset posílat ani pro editable a sortable.

mpis
Člen | 65
+
0
-

Advanced-pager jsem už vyzkoušel. Dobrá práce.
Mám ale jeden problém, že v advanced-pager mi nefunguje přechod na zadanou stánku(Go!).
Hlásí mi to „ReferenceError: jQuery is not defined“ a nemůžu přijít na příčinu.
Všechno ostatní maká dobře.
V dalším vývoji pageru by bylo dobré přidat „Items 1 – 10 of 25“ a možnost určit počet řádků na stránku třeba selectem.

mesour
Nette Blogger | 236
+
0
-

Je možné, že jQuery načítáte až v patičce, protože grid vkládá scripty přímo do templaty je potřeba jquery a jquery.ui pro sortování vložit už v hlavičce nebo alespoň před vložením componenty gridu do templaty.

S tím vlastním nastavením itemů na stránku, to je dobrý nápad, určitě implementuji :-)

Díky za tip :-)

mpis napsal(a):

Advanced-pager jsem už vyzkoušel. Dobrá práce.
Mám ale jeden problém, že v advanced-pager mi nefunguje přechod na zadanou stánku(Go!).
Hlásí mi to „ReferenceError: jQuery is not defined“ a nemůžu přijít na příčinu.
Všechno ostatní maká dobře.
V dalším vývoji pageru by bylo dobré přidat „Items 1 – 10 of 25“ a možnost určit počet řádků na stránku třeba selectem.

Editoval mesour (8. 10. 2014 16:43)

svobodai
Člen | 136
+
0
-

Jakým způsobem se sortuje, resp. co má být v té funkci sort, protože na stránkách s demem jsem to neviděl a zřejmně nepochopil.
V demu je poznámka, že sortování nefunguje se stránkováním.

Ve filtru mám několik selectboxů a ty jsou na sobě závislé. Ten form jsem si samostatně vyzkoušel a připravil si skripty tak abz to probíhalo správně, ale není mi jasné jak to dostanu do té filtrace.

mesour
Nette Blogger | 236
+
0
-

Do callbacku sort přijde pole, je tam znázorněné, jak to pole vypadá. Takže by tam mohlo být třeba toto:

public function sort($data) {
	$sort = 0;
    foreach($data as $id => $parent_id) {
		$this->model->updateTable('myTable', array(
			'sort' => $sort
		), $id);
		$sort = $sort + 10;
	}
	$this->redrawControl();
}

Metoda updateTable updatuje tabulku myTable, nastaví do sloupce sort čísla, podle kterých se bude při selectu řadit. A udělá update where primary_key = $id. Pokud by jste sortoval strom a zařazoval položky pod sebe, tak by se neupdatoval jen sloupec sort, ale i parent_id a hodnotu by měl $parent_id.

Je pravda, že je to tam trochu blbě popsané. Zkusím to nějak lépe popsat ;-)

Co se týče vlastního filtru, je potřeba nastavit u setFilterForm jako druhý parametr false, tím se vypne defaultní filtrování a pak ručně filtrovat na dataSource, jak je vidět tady http://grid.mesour.com/filter/custom/ pod komentářem „//using custom filtering“.

Jinak připravuji opravdu obsáhlé filtry, budou umět skoro vše, takže ani nebude potřeba mít vlastní filtr a používat nějaký formulář. Přesto tam asi nechám možnost nastavit vlastní filtr form.

svobodai napsal(a):

Jakým způsobem se sortuje, resp. co má být v té funkci sort, protože na stránkách s demem jsem to neviděl a zřejmně nepochopil.
V demu je poznámka, že sortování nefunguje se stránkováním.

Ve filtru mám několik selectboxů a ty jsou na sobě závislé. Ten form jsem si samostatně vyzkoušel a připravil si skripty tak abz to probíhalo správně, ale není mi jasné jak to dostanu do té filtrace.

Editoval mesour (10. 10. 2014 20:38)

svobodai
Člen | 136
+
0
-

Filtr se zobrazuje a i předává parametry. Problém pro mně je, že bych tomu formu potřeboval nastavit šablonu, protože ho mám rozdělen na několik snippetů, pomocí kterých zajišťuji zužování výběrů v selectboxech.

Nefunguje mi řazení, když stisknu jméno sloupce tak se sice přenačte stránka, ale dokumnety se nesetřídí.

Jak mohu nastylovat šířka sloupce a zarovnání dat.

Filip Procházka
Moderator | 4668
+
0
-

Demo ti háže pětistovky.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Filtr se zobrazuje a i předává parametry. Problém pro mně je, že bych tomu formu potřeboval nastavit šablonu, protože ho mám rozdělen na několik snippetů, pomocí kterých zajišťuji zužování výběrů v selectboxech.

Nefunguje mi řazení, když stisknu jméno sloupce tak se sice přenačte stránka, ale dokumnety se nesetřídí.

Jak mohu nastylovat šířka sloupce a zarovnání dat.

Aha, tak šablona formuláři nastavit nejde. Do další verze to umožním.

Nemáte náhodou nastavené ORDER BY ještě před tím, než ho posíláte do gridu? Druhá možnost proč to vypadá, že neřadí je, pokud řadíte podle dvou sloupců, například name a amount. V tom případě se zavolá ORDER BY name ASC, amount ASC. Priorita je podle toho, co začnete řadit dříve a když jsou name vždycky různorodé, tak se to podle amount už neseřadí, protože primárně řadíte podle jména. Kdyby byly třeba dvě stejné jména, tak se ty dva řádky budou následně řadit podle amount, to už fungovat bude.

Šířku sloupce asi také nenastavíte, jedině mě napadá to fixnout přes Javascript a podle toho kolikátý je to sloupec, tak mu nastavit šířku nebo dát classy column-first, -second, -third… Do další verze přidám do hlavičky na <th> class=„column-key_name“.

mesour
Nette Blogger | 236
+
0
-

Filip Procházka napsal(a):

Demo ti háže pětistovky.

Myslíš při nějakých akcích, když se například klikne na active/unactive, delete, edit a tak? Zatím jsem se nedostal k tomu, abych tam ty metody a presentery přidal. Až budu dělat nějaký update, tak to přidám, ať to nevypadá blbě.

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

Filtr se zobrazuje a i předává parametry. Problém pro mně je, že bych tomu formu potřeboval nastavit šablonu, protože ho mám rozdělen na několik snippetů, pomocí kterých zajišťuji zužování výběrů v selectboxech.

Nefunguje mi řazení, když stisknu jméno sloupce tak se sice přenačte stránka, ale dokumnety se nesetřídí.

Jak mohu nastylovat šířka sloupce a zarovnání dat.

Aha, tak šablona formuláři nastavit nejde. Do další verze to umožním.

Nemáte náhodou nastavené ORDER BY ještě před tím, než ho posíláte do gridu? Druhá možnost proč to vypadá, že neřadí je, pokud řadíte podle dvou sloupců, například name a amount. V tom případě se zavolá ORDER BY name ASC, amount ASC. Priorita je podle toho, co začnete řadit dříve a když jsou name vždycky různorodé, tak se to podle amount už neseřadí, protože primárně řadíte podle jména. Kdyby byly třeba dvě stejné jména, tak se ty dva řádky budou následně řadit podle amount, to už fungovat bude.

Šířku sloupce asi také nenastavíte, jedině mě napadá to fixnout přes Javascript a podle toho kolikátý je to sloupec, tak mu nastavit šířku nebo dát classy column-first, -second, -third… Do další verze přidám do hlavičky na <th> class=„column-key_name“.

Aha ORDER BY mám nastavené, dá se nějak nastavit defaultní order, který by se použil, když není jiný zadán. Bohužel jsem nucen pracovat s MSSQL a to sice ve verzi 2012 umí jakousi variantu limit, offset , ale je k tomu nutno mít nastaven alespoň jeden ORDER BY.
No možná by si do definice sloupce buď člověk mohl dát class sám, nebo možnost nastavit style pro hlavičku i data podobně jako je to v GRIDO, které mi bohužel jinak nevyhovuje.
Dá se gridu nastavit jakou si m vzít šablonu. Mohl bych si nadefinovat vlastní latte ve kterém bych měl tan formulář tak jak potřebuju?
Takový námět, nemohlo by být to řazení přepínáno mezi postupným přidáváním a sortováním podle aktuálně vybraného sloupce. Možná to tam je.

Editoval svobodai (11. 10. 2014 12:50)

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Filtr se zobrazuje a i předává parametry. Problém pro mně je, že bych tomu formu potřeboval nastavit šablonu, protože ho mám rozdělen na několik snippetů, pomocí kterých zajišťuji zužování výběrů v selectboxech.

Nefunguje mi řazení, když stisknu jméno sloupce tak se sice přenačte stránka, ale dokumnety se nesetřídí.

Jak mohu nastylovat šířka sloupce a zarovnání dat.

Aha, tak šablona formuláři nastavit nejde. Do další verze to umožním.

Nemáte náhodou nastavené ORDER BY ještě před tím, než ho posíláte do gridu? Druhá možnost proč to vypadá, že neřadí je, pokud řadíte podle dvou sloupců, například name a amount. V tom případě se zavolá ORDER BY name ASC, amount ASC. Priorita je podle toho, co začnete řadit dříve a když jsou name vždycky různorodé, tak se to podle amount už neseřadí, protože primárně řadíte podle jména. Kdyby byly třeba dvě stejné jména, tak se ty dva řádky budou následně řadit podle amount, to už fungovat bude.

Šířku sloupce asi také nenastavíte, jedině mě napadá to fixnout přes Javascript a podle toho kolikátý je to sloupec, tak mu nastavit šířku nebo dát classy column-first, -second, -third… Do další verze přidám do hlavičky na <th> class=„column-key_name“.

Aha ORDER BY mám nastavené, dá se nějak nastavit defaultní order, který by se použil, když není jiný zadán. Bohužel jsem nucen pracovat s MSSQL a to sice ve verzi 2012 umí jakousi variantu limit, offset , ale je k tomu nutno mít nastaven alespoň jeden ORDER BY.
No možná by si do definice sloupce buď člověk mohl dát class sám, nebo možnost nastavit style pro hlavičku i data podobně jako je to v GRIDO, které mi bohužel jinak nevyhovuje.
Dá se gridu nastavit jakou si m vzít šablonu. Mohl bych si nadefinovat vlastní latte ve kterém bych měl tan formulář tak jak potřebuju?
Takový námět, nemohlo by být to řazení přepínáno mezi postupným přidáváním a sortováním podle aktuálně vybraného sloupce. Možná to tam je.

Právě na tom pracuji.

  1. Možnost nastavit defaultní order, který by se přepsal, pokud by bylo kliknuto na jiný bych mohl dodělat. Zatím to neumí.
  2. Takové nastavení pro sloupce bych také mohl dodělat, ale podle mě by bohatě stačilo, kdyby měl každý <th> v hlavičce classu například class=„column_name“ případně column_email. Name a email by byl název sloupce v DB, který se posílá do columnu pod klíčem s konstantou Column\Type::ID.
  3. Jestli myslíte šablonu pro vykreslení filtrovacího formuláře, tak takovou možnost mám v plánu dodělat, zatím to tam není. Možnost přepsat gridu defaultní šablonu pro celý grid mi přijde zbytečné. S tím filtr formem to bude tak, že se nebude muset posílat žádný formulář a grid už bude mít nějaký defaultní v sobě, když nastavíte vlastní formulář, tak použije ten a půjde mu také nastavit šablona, když se nenastaví, tak grid formuláři nastaví FilterFormRenderer a vykreslí ho automaticky.
  4. Jestli to dobře chápu, tak myslíte mít nějakou možnost nastavit, zda se bude moct řadit podle více sloupců, či nikoliv? Při zapnutém řazení pouze podle jednoho sloupce by se předchozí hodnota přepsala? Jestli to je tak, takovou možnost to nemá, ale mohl bych dodělat.

Editoval mesour (11. 10. 2014 16:14)

mesour
Nette Blogger | 236
+
+1
-

S novou verzí můžete počítat dnes večer, možná během zítřka 12.10.2014.

Asi se všem uleví. Od nové verze se nebude muset vůbec nastavovat httpRequest ;-) Všechno půjde getem přes persistent a také chci udělat možnost vygenerovat odkaz na aktuální nastavení gridu, které se po přejití na odkaz uloží do session.

Z classy \DataGrid\Grid už nebude God object, ale funkcionalita pro pager, export a další bude rozdělena do subcomponent (extensions). A budou z \DataGrid\Grid odstraněny nějaké zbytečné private property.

Přibude opravdu pěkný a komplexní defaultní filtr a pár dalších vychytávek. Defaultnímu filtru už nebude potřeba nastavovat žádný formulář, jen se zavolá enableFilter(). Z toho důvodu ale na IDataSource přibudou nějaké nové povinné metody.

Také přidám lokalizaci. Nejspíš to bude nějaký soubor pro každý jazyk vracející pole. V základu bude umět CZ, EN a asi i DE jazyky. Půjde nastavit cesta k vlastnímu lokalizačnímu souboru.

Editoval mesour (11. 10. 2014 16:27)

svobodai
Člen | 136
+
0
-

No spíš jsem mzslel, že bych si vztvořil vlastní grid do kterého bzch extendoval tvůj a nastavil mu novou šablonu, kterou bych si zkopíroval a upravil, takže bych si některé věci mohl rychle vyřešit, ale jestli to v nové verzi půjde tak počkám.

Ještě dotaz pokud je sloupec numerický šlo by udělat abz se na posledním řádku udělal suma tohoto sloupce za danou stránku. Kdyby to umělo ještě řádek se sumou za celý select bylo by to příjemné.

Editoval svobodai (11. 10. 2014 17:00)

mesour
Nette Blogger | 236
+
+1
-

svobodai napsal(a):

No spíš jsem mzslel, že bych si vztvořil vlastní grid do kterého bzch extendoval tvůj a nastavil mu novou šablonu, kterou bych si zkopíroval a upravil, takže bych si některé věci mohl rychle vyřešit, ale jestli to v nové verzi půjde tak počkám.

Ještě dotaz pokud je sloupec numerický šlo by udělat abz se na posledním řádku udělal suma tohoto sloupce za danou stránku. Kdyby to umělo ještě řádek se sumou za celý select bylo by to příjemné.

V nové verzi to určitě půjde ;-)

S tím součtem nevím, dost by to asi rozbilo současný koncept. Šlo by to ale udělat pře JS. Zjistit, že jsou v daném sloupci čísla, sečíst a dolu appendnout <tr> po doc.ready ;-) Nebo vlastně po $(window).ajaxComplete(function(){}), aby to fungovalo i při ajaxovém requestu.

svobodai
Člen | 136
+
0
-

Nějak mi nefunguje Sloupec Action
vstup do Gridu

		$selection = $this->database->table('AdminUsers');
		$selection->select('IdAdminUser, FullName, Login, ActiveUser');

a v gridu je vytváření sloupce

		$grid->column(new Column\Action(array(
			 Column\Action::ID => 'ActiveUser',
			 Column\Action::LINK => 'changeStateUser',
		)));

Při nahrávání mi to vyhodí Chybu undefined index: action na řádku 72 v souboru Action.php

68:        public function getBodyAttributes($data) {
69:            if (!$this->checkPermissions()) {
70:                return FALSE;
71:            }
72:            if ($data[self::$action_column_name] == self::$actions['active']) {
73:                return array('class' => 'is-unactive');
74:            } else {
75:                return array('class' => 'is-active');
76:            }

Kde nastavím ten action_column_name, zjistil jsem, že action je default hodnota

mesour
Nette Blogger | 236
+
+1
-

svobodai napsal(a):

Nějak mi nefunguje Sloupec Action
vstup do Gridu

		$selection = $this->database->table('AdminUsers');
		$selection->select('IdAdminUser, FullName, Login, ActiveUser');

a v gridu je vytváření sloupce

		$grid->column(new Column\Action(array(
			 Column\Action::ID => 'ActiveUser',
			 Column\Action::LINK => 'changeStateUser',
		)));

Při nahrávání mi to vyhodí Chybu undefined index: action na řádku 72 v souboru Action.php

68:        public function getBodyAttributes($data) {
69:            if (!$this->checkPermissions()) {
70:                return FALSE;
71:            }
72:            if ($data[self::$action_column_name] == self::$actions['active']) {
73:                return array('class' => 'is-unactive');
74:            } else {
75:                return array('class' => 'is-active');
76:            }

Kde nastavím ten action_column_name, zjistil jsem, že action je default hodnota

Aha díky za upozornění, chtělo by to srozumitelnější chybové hlášení, něco jako „Column "action“ does not exist in data. Can use \DataGrid\Column\Base::$action_column_name = „your_column_name“ for change this column name."

Takže defaultní hodnota se dá přepsat pomocí:

\DataGrid\Column\Base::$action_column_name = "tvůj_column"

Tu hlášku jsem tam právě zapracoval, takže v další verzi to už bude ;-)

Mimo jiné, jako link je potřeba poslat handler, máš tam jen „changeStateUser“, to chce změnit na „changeStateUser!“.

Editoval mesour (12. 10. 2014 0:18)

svobodai
Člen | 136
+
0
-

Díky s tím nastavení už to funguje. Možná by to chtělo dát do toho dema.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Díky s tím nastavení už to funguje. Možná by to chtělo dát do toho dema.

Jojo, to je dobrý nápad. Vím o tom, že demo neobsahuje všechno, takže udělám nějakou sekci třeba change defaults :-)

Každopádně díky za tip :-)

Editoval mesour (12. 10. 2014 1:05)

tom
Člen | 171
+
0
-

Ahoj,
prosímtě GridTree nefunguje s DibiDataSource? jestli ne, plánuješ na to podporu anebo si mám raději vše předělat na NetteDbDataSource?

Dík Tom

mesour
Nette Blogger | 236
+
0
-

tom napsal(a):

Ahoj,
prosímtě GridTree nefunguje s DibiDataSource? jestli ne, plánuješ na to podporu anebo si mám raději vše předělat na NetteDbDataSource?

Dík Tom

Ahoj, stačí mrknou sem: http://grid.mesour.com/…source/dibi/ ;-)

tom
Člen | 171
+
0
-

Ajo díky :) A prosímtě, snažím se nastavit sortování ale dostávám

Argument 1 passed to DataGrid\Grid::sortable() must be an instance of DataGrid\callable, instance of Nette\Callback given

Nevíš čím to opravit?

Dík

mesour napsal(a):

tom napsal(a):

Ahoj,
prosímtě GridTree nefunguje s DibiDataSource? jestli ne, plánuješ na to podporu anebo si mám raději vše předělat na NetteDbDataSource?

Dík Tom

Ahoj, stačí mrknou sem: http://grid.mesour.com/…source/dibi/ ;-)

mesour
Nette Blogger | 236
+
0
-

tom napsal(a):

Ajo díky :) A prosímtě, snažím se nastavit sortování ale dostávám

Argument 1 passed to DataGrid\Grid::sortable() must be an instance of DataGrid\callable, instance of Nette\Callback given

Nevíš čím to opravit?

Dík

Zkuste místo instance \Nette\Callback poslat array($this, ‚method‘). Od další verze na to bude event onSort, takže bude stačit udělat $grid->onMove[] = $this->method; a to určitě bude akceptovat i instanci Nette\Callback

Editoval mesour (13. 10. 2014 16:31)

jiri.pudil
Nette Blogger | 1028
+
0
-

@tom to vypadá, že používáš PHP 5.3. V tom případě to můžeš sám opravit jedině upgradem PHP, protože @mesour použil typehint callable, což je 5.4+ feature.

tom
Člen | 171
+
0
-

jiri.pudil napsal(a):

@tom to vypadá, že používáš PHP 5.3. V tom případě to můžeš sám opravit jedině upgradem PHP, protože @mesour použil typehint callable, což je 5.4+ feature.

jo to bude ono, dik

tom
Člen | 171
+
0
-

Ještě se zeptám Mesoura jestli třeba v nějaké další verzi neplánuje i podporu PHP 5.3. Jsem ve fázi rozhodování, který grid použít v dalším projektu a zatím si nejsem jistý jestli budu mít možnost použít PHP 5.4 nebo vyšší. Tak pro info.

Díky

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

No spíš jsem mzslel, že bych si vztvořil vlastní grid do kterého bzch extendoval tvůj a nastavil mu novou šablonu, kterou bych si zkopíroval a upravil, takže bych si některé věci mohl rychle vyřešit, ale jestli to v nové verzi půjde tak počkám.

Ještě dotaz pokud je sloupec numerický šlo by udělat abz se na posledním řádku udělal suma tohoto sloupce za danou stránku. Kdyby to umělo ještě řádek se sumou za celý select bylo by to příjemné.

V nové verzi to určitě půjde ;-)

S tím součtem nevím, dost by to asi rozbilo současný koncept. Šlo by to ale udělat pře JS. Zjistit, že jsou v daném sloupci čísla, sečíst a dolu appendnout <tr> po doc.ready ;-) Nebo vlastně po $(window).ajaxComplete(function(){}), aby to fungovalo i při ajaxovém requestu.

Jenom skromný dotaz jak jsi na tom s novou verzí?

mesour
Nette Blogger | 236
+
+2
-

Jenom skromný dotaz jak jsi na tom s novou verzí?

Bude během dneška, trochu jsem se zasekl s napojením ArrayDataSource na nový filtr, takže jsem musel celý tenhle data source překopat. Ostatní je vše hotovo, už jen doladím drobnosti a udělám update ;-)

Editoval mesour (13. 10. 2014 16:34)

mesour
Nette Blogger | 236
+
+1
-

tom napsal(a):

Ještě se zeptám Mesoura jestli třeba v nějaké další verzi neplánuje i podporu PHP 5.3. Jsem ve fázi rozhodování, který grid použít v dalším projektu a zatím si nejsem jistý jestli budu mít možnost použít PHP 5.4 nebo vyšší. Tak pro info.

Díky

Od nové verze se nebude posílat callback v parametru, ale použije se $grid->onEditColumn[] tím pádem by to mělo fungovat i pro 5.3.

mesour
Nette Blogger | 236
+
0
-

Zdravím, tak jsem konečně nahrál novou verzi, je toho dost nového. Jsou nějaké deprecated a co je dost důležité, tak byly z gridu odstraněny dvě metody injectHttpRequest a setCacheDir.

Asi největší změna je nový defaultní filtr: http://grid.mesour.com/filter/, není potřeba nastavovat žádný formulář ;-)

Tady je vidět, jak se dá nastavit vlastní šablona pro vykreslení filtrovacího formuláře: http://grid.mesour.com/filter/custom/#…

Dál jsem udělal metody sortable, editable, setFilterForm a setCheckboxSelection deprecated.

Mimo jiné vznikly dva eventy pro nastavení callbacků, protože s nimi byl problém: onSort a onEditCell.

Přidal jsem stránku, kde je možné zjistit, jak přepsat defaultní nastavení: http://grid.mesour.com/setting/

Byl odstraněný jquery.ui.datetimepicker a místo toho je tam bootstrap datetimepicker.

A také každý column má v hlavičce na <th> classu podle ID sloupce, takže třeba class=„grid-column-email“. Email je ID sloupce ;-)

Co není v přehledu změn, tak z gridu už není god object. Funkcionalita byla přesunuta do subcomponent (extensions), tím se odlehčilo i základní templatě grid.latte

Všechny změny jsou zde: http://grid.mesour.com/versions/#1.4

Editoval mesour (13. 10. 2014 22:45)