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

mesour
Nette Blogger | 236
+
0
-

tom napsal(a):

Export do CSV – dá se nějak nastavit název souboru a kódování češtiny?

Díky

Zkoušel jsem to a je to OK, asi záleží na kódování DB. Já používám utf8_general_ci, všechny zdrojáky mám v utf8 a výsledný soubor je také utf8, takže nejspíš bude asi problém s kódováním v DB.

Název se zatím nastavit nedá, zapracuji do další verze 1.4.3.

Editoval mesour (20. 10. 2014 9:48)

mesour
Nette Blogger | 236
+
0
-

Zdravím, vyšla nová verze 1.4.2 a s ní některé bug fixy, nový Status column, který nahradil deprecated Action columnhttp://grid.mesour.com/column/status/

A také možnost vypnout vypisování js a css v templatě gridu:
http://grid.mesour.com/setting/#…
Takže je možné si zkopírovat soubory /vendor/mesour/datagrid/DataGrid/src/grid.js a grid.css do své složky, vypnout automatické vypisování a nalinkovat je ručně kdekoliv ve stránce nebo k nim Gruntu nastavit cestu, záleží, co používáte.

Názvy a cesta k souborům se s novějšími verzemi měnit nebude. Pokud ale zkopírujete soubory do jiného adresáře, JS si hlídá verzi s gridem, takže vyskočí alert, že není stejná verze JS, jako má grid a je potřeba updatovat ty dva soubory.

Změny jsou zde: http://grid.mesour.com/versions/#…

Editoval mesour (20. 10. 2014 9:59)

mpis
Člen | 65
+
0
-

mesour napsal(a):

Export do CSV – kódování češtiny?

Zkoušel jsem to a je to OK, asi záleží na kódování DB. Já používám utf8_general_ci, všechny zdrojáky mám v utf8 a výsledný soubor je také utf8, takže nejspíš bude asi problém s kódováním v DB.

Když jako zdroj dat použiji array, tak to diakritiku zobrazí taky špatně.
Tak nevím, kde může být chyba.
A ještě námět na vylepšení exportu.
Text vyexportovaný do excelu sice jde poměrně snadno rozdělit do sloupců,
ale bylo by pohodlnější, aby to udělal export rovnou.

svobodai
Člen | 136
+
0
-

Status sloupec funguje výborně. Jen mám problém,protože se mi nenačítají fonty. Hlásí mi to, že přístup k souborům v adresáři fonts je zakázán. Už jsem podle google upravil httpd.conf i jsem přidal uživatele everyone na ten adresář, upravil jsem .htaccess, ale je to stále stejné.

Tak je to jen lokální problém, sice nevím co s ním, ale na serveru mi to funguja a proto to na lokálu neřeším.

Editoval svobodai (20. 10. 2014 15:49)

svobodai
Člen | 136
+
0
-

@mesour nemohl by jsi sepsat ty javascripty, které používáš? Mně s tím nette.ajax.js nefunguje filtrování.Koukal jsem na konzoli a když dám filtrovat tak se vůbec neprovede update snippetu.

svobodai
Člen | 136
+
0
-

Mám problém s filtrací, když odešlu formulář stiskem tlačítka Filter, tak tam kde se mají získat hodnoty z toho formuláře tak mi zůstává prázdné pole. tj. nevidím žádné hodnoty, které jsem vybral ve formu.

tom
Člen | 171
+
0
-

mesour napsal(a):

tom napsal(a):

Export do CSV – dá se nějak nastavit název souboru a kódování češtiny?

Díky

Zkoušel jsem to a je to OK, asi záleží na kódování DB. Já používám utf8_general_ci, všechny zdrojáky mám v utf8 a výsledný soubor je také utf8, takže nejspíš bude asi problém s kódováním v DB.

Název se zatím nastavit nedá, zapracuji do další verze 1.4.3.

Super díky. Ještě mě napadá jedna věc – do toho CSV se dostanou hodnoty sloupců, které jsou vidět v gridu. Dalo by se tam „vpašovat“ i další? A ještě jedna věc, když si v některém sloupci třeba složím jméno a příjmení (nebo něco podobné) jenže do toho CSV se nedostává ten složený sloupec ale pouze ten na který je to navěšeno. Šlo by to ošetřit?

Dík

tom
Člen | 171
+
0
-

Dá se prosím při použití sortable callbacku nějak poznat, kterým záznamem „bylo pohybováno“? Nyní v tom poli data procházím a upravuji všechny záznamy (viz ukázka), což je OK. Ale hodilo by se mi při tom průchodu i vědět, který záznam to způsobil. Dá se to nějak?

Díky

svobodai
Člen | 136
+
0
-

Nešlo by ke sloupci přidat dva parametry pro formátování
CLASS a WIDTH, které by se použily při renderování tabulky Gridu, stejně jako se tam teď přidávají informace pro editační pole.

mesour
Nette Blogger | 236
+
0
-

mpis napsal(a):

mesour napsal(a):

Export do CSV – kódování češtiny?

Zkoušel jsem to a je to OK, asi záleží na kódování DB. Já používám utf8_general_ci, všechny zdrojáky mám v utf8 a výsledný soubor je také utf8, takže nejspíš bude asi problém s kódováním v DB.

Když jako zdroj dat použiji array, tak to diakritiku zobrazí taky špatně.
Tak nevím, kde může být chyba.
A ještě námět na vylepšení exportu.
Text vyexportovaný do excelu sice jde poměrně snadno rozdělit do sloupců,
ale bylo by pohodlnější, aby to udělal export rovnou.

Právě to řeším. Ale s tím kódováním by mohl problém nastat, když CSV otevřeš a děláš z něj excel, tak je tam výběr kódování, tam je potřeba vybrat utf8. V CSV souboru jsou znaky správné i když jsem použil array. Právě instaluji excel, abych to vyzkoušel přímo na něm, ale na google drive mi to funguje správně i se to samo rozdělí do sloupců jak má.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Status sloupec funguje výborně. Jen mám problém,protože se mi nenačítají fonty. Hlásí mi to, že přístup k souborům v adresáři fonts je zakázán. Už jsem podle google upravil httpd.conf i jsem přidal uživatele everyone na ten adresář, upravil jsem .htaccess, ale je to stále stejné.

Tak je to jen lokální problém, sice nevím co s ním, ale na serveru mi to funguja a proto to na lokálu neřeším.

Tohle se ale netýká gridu ne? Pomůžu ti s tím, ale napiš mi sem: http://mesour.com/contact/ ať se to neřeší zde. Potřebuji vědět, tvůj OS, obsah .htaccess a kde přesně to hlásí, že je ten přístup zakázán.

tom
Člen | 171
+
0
-

mesour napsal(a):

mpis napsal(a):

mesour napsal(a):

Export do CSV – kódování češtiny?

Zkoušel jsem to a je to OK, asi záleží na kódování DB. Já používám utf8_general_ci, všechny zdrojáky mám v utf8 a výsledný soubor je také utf8, takže nejspíš bude asi problém s kódováním v DB.

Když jako zdroj dat použiji array, tak to diakritiku zobrazí taky špatně.
Tak nevím, kde může být chyba.
A ještě námět na vylepšení exportu.
Text vyexportovaný do excelu sice jde poměrně snadno rozdělit do sloupců,
ale bylo by pohodlnější, aby to udělal export rovnou.

Právě to řeším. Ale s tím kódováním by mohl problém nastat, když CSV otevřeš a děláš z něj excel, tak je tam výběr kódování, tam je potřeba vybrat utf8. V CSV souboru jsou znaky správné i když jsem použil array. Právě instaluji excel, abych to vyzkoušel přímo na něm, ale na google drive mi to funguje správně i se to samo rozdělí do sloupců jak má.

Jojo funguje to …

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

@mesour nemohl by jsi sepsat ty javascripty, které používáš? Mně s tím nette.ajax.js nefunguje filtrování.Koukal jsem na konzoli a když dám filtrovat tak se vůbec neprovede update snippetu.

Přesně používám tenhle: http://grid.mesour.com/…ery.nette.js Vůbec nevím, jaká je to verze, bude to už hodně staré, ale funguje :-)

mesour
Nette Blogger | 236
+
0
-

tom napsal(a):

mesour napsal(a):

tom napsal(a):

Export do CSV – dá se nějak nastavit název souboru a kódování češtiny?

Díky

Zkoušel jsem to a je to OK, asi záleží na kódování DB. Já používám utf8_general_ci, všechny zdrojáky mám v utf8 a výsledný soubor je také utf8, takže nejspíš bude asi problém s kódováním v DB.

Název se zatím nastavit nedá, zapracuji do další verze 1.4.3.

Super díky. Ještě mě napadá jedna věc – do toho CSV se dostanou hodnoty sloupců, které jsou vidět v gridu. Dalo by se tam „vpašovat“ i další? A ještě jedna věc, když si v některém sloupci třeba složím jméno a příjmení (nebo něco podobné) jenže do toho CSV se nedostává ten složený sloupec ale pouze ten na který je to navěšeno. Šlo by to ošetřit?

Dík

Otestuji a dám během dneška vědět. Připravím asi novou verzi 1.4.3

mesour
Nette Blogger | 236
+
+1
-

tom napsal(a):

Dá se prosím při použití sortable callbacku nějak poznat, kterým záznamem „bylo pohybováno“? Nyní v tom poli data procházím a upravuji všechny záznamy (viz ukázka), což je OK. Ale hodilo by se mi při tom průchodu i vědět, který záznam to způsobil. Dá se to nějak?

Díky

Tohle už jsem řešil s jedním kolegou. Určitě tu možnost udělám, zatím to nelze. Nevím, zda to stihnu už ve verzi 1.4.3 ale mám to v plánu.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Mám problém s filtrací, když odešlu formulář stiskem tlačítka Filter, tak tam kde se mají získat hodnoty z toho formuláře tak mi zůstává prázdné pole. tj. nevidím žádné hodnoty, které jsem vybral ve formu.

Co myslíš tím „tam kde se mají získat hodnoty“? Co je to přesně za místo?

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Nešlo by ke sloupci přidat dva parametry pro formátování
CLASS a WIDTH, které by se použily při renderování tabulky Gridu, stejně jako se tam teď přidávají informace pro editační pole.

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 (název sloupce v DB).

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

Nešlo by ke sloupci přidat dva parametry pro formátování
CLASS a WIDTH, které by se použily při renderování tabulky Gridu, stejně jako se tam teď přidávají informace pro editační pole.

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 (název sloupce v DB).

Jo tomu rozumím to je hlavička. Já bych potřeboval aby byla nějaká taková clasa i v jednotlivých řádcích, protože potřebuju nastavit zarovnání podle toho jestli je to textový sloupec nebo číselný případně datumový.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Nešlo by ke sloupci přidat dva parametry pro formátování
CLASS a WIDTH, které by se použily při renderování tabulky Gridu, stejně jako se tam teď přidávají informace pro editační pole.

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 (název sloupce v DB).

Jo tomu rozumím to je hlavička. Já bych potřeboval aby byla nějaká taková clasa i v jednotlivých řádcích, protože potřebuju nastavit zarovnání podle toho jestli je to textový sloupec nebo číselný případně datumový.

Můžu na ně dávat classu podle toho, co je to za typ, takže třeba „column-type-number“, „column-type-date“ a tak dál, to by stačilo?

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

Mám problém s filtrací, když odešlu formulář stiskem tlačítka Filter, tak tam kde se mají získat hodnoty z toho formuláře tak mi zůstává prázdné pole. tj. nevidím žádné hodnoty, které jsem vybral ve formu.

Co myslíš tím „tam kde se mají získat hodnoty“? Co je to přesně za místo?

Myslím tím,

$filter_values = $grid->getFilterValues();

když si potom dám dump proměnné tak je tam prázdné pole, ale měly by tam být předané informace z formuláře.

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Nešlo by ke sloupci přidat dva parametry pro formátování
CLASS a WIDTH, které by se použily při renderování tabulky Gridu, stejně jako se tam teď přidávají informace pro editační pole.

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 (název sloupce v DB).

Jo tomu rozumím to je hlavička. Já bych potřeboval aby byla nějaká taková clasa i v jednotlivých řádcích, protože potřebuju nastavit zarovnání podle toho jestli je to textový sloupec nebo číselný případně datumový.

Můžu na ně dávat classu podle toho, co je to za typ, takže třeba „column-type-number“, „column-type-date“ a tak dál, to by stačilo?

Jojo takhle by to určitě stačilo.

mesour
Nette Blogger | 236
+
0
-

Nová verze 1.4.3 je na světě.

Asi největěí změna je přidání možností pro export: http://grid.mesour.com/export/#…

Mimo jiné jdou data do exportu přes callback, pokud je ve sloupci text nastavený.

Dále je setLineId deprecated, místo toho vznikla nová metoda setPrimaryKey pouze s jedním parametrem. Bude to jasnější.

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

Editoval mesour (21. 10. 2014 13:52)

mpis
Člen | 65
+
+1
-

mesour napsal(a):

Právě to řeším. Ale s tím kódováním by mohl problém nastat, když CSV otevřeš a děláš z něj excel, tak je tam výběr kódování, tam je potřeba vybrat utf8. V CSV souboru jsou znaky správné i když jsem použil array. Právě instaluji excel, abych to vyzkoušel přímo na něm, ale na google drive mi to funguje správně i se to samo rozdělí do sloupců jak má.

Už tuším,kde je problém.
Ty popisuješ situaci, kdy provedeš export do CSV a soubor uložíš.
Potom při importu do excelu je v dialogu nabídka kódování. To je OK.
Ale já mluvím o případu, kdy ten export pošlu rovnou do excelu.
To se všechno dá do sloupce A bez rozdělení a se špatnou diakritikou.

svobodai
Člen | 136
+
0
-

Tlačítko filter se chová divně, když ho zkoučím na demu tak mi v url řádku zůstává stejná informace. Pokud si to pustím u mně tak se mi do url přidá ještě ?do=grid-filter-submitForm.Není tam někde js kód, který to v demu zachytí?

mesour
Nette Blogger | 236
+
0
-

mpis napsal(a):

mesour napsal(a):

Právě to řeším. Ale s tím kódováním by mohl problém nastat, když CSV otevřeš a děláš z něj excel, tak je tam výběr kódování, tam je potřeba vybrat utf8. V CSV souboru jsou znaky správné i když jsem použil array. Právě instaluji excel, abych to vyzkoušel přímo na něm, ale na google drive mi to funguje správně i se to samo rozdělí do sloupců jak má.

Už tuším,kde je problém.
Ty popisuješ situaci, kdy provedeš export do CSV a soubor uložíš.
Potom při importu do excelu je v dialogu nabídka kódování. To je OK.
Ale já mluvím o případu, kdy ten export pošlu rovnou do excelu.
To se všechno dá do sloupce A bez rozdělení a se špatnou diakritikou.

Jak to myslíš pošleš rovnou do excelu? Export je do CSV, takže je z toho pak nutné excel udělat. Export přímo do excelu dělat nebudu, protože bych musel dávat součástí gridu nějakou PHP knihovnu pro práci s excelem a ty bývají opravdu velké a přeobjektované.

jazby
Člen | 44
+
0
-

mesour napsal(a):

mpis napsal(a):

mesour napsal(a):

Právě to řeším. Ale s tím kódováním by mohl problém nastat, když CSV otevřeš a děláš z něj excel, tak je tam výběr kódování, tam je potřeba vybrat utf8. V CSV souboru jsou znaky správné i když jsem použil array. Právě instaluji excel, abych to vyzkoušel přímo na něm, ale na google drive mi to funguje správně i se to samo rozdělí do sloupců jak má.

Už tuším,kde je problém.
Ty popisuješ situaci, kdy provedeš export do CSV a soubor uložíš.
Potom při importu do excelu je v dialogu nabídka kódování. To je OK.
Ale já mluvím o případu, kdy ten export pošlu rovnou do excelu.
To se všechno dá do sloupce A bez rozdělení a se špatnou diakritikou.

Jak to myslíš pošleš rovnou do excelu? Export je do CSV, takže je z toho pak nutné excel udělat. Export přímo do excelu dělat nebudu, protože bych musel dávat součástí gridu nějakou PHP knihovnu pro práci s excelem a ty bývají opravdu velké a přeobjektované.

Stáhneš csv. Otevřeš jej přímo v excelu. Ten není chytrý a nepochopí že se jedná o CSV, ale vše narve do jednoho řádku. Následně se na to používá fce „text do sloupců“ která provede rozdělením na slupce. Jenže v tomto dialogu již poté není výběr kódování. Pokud zvolíš druhou cestu, tedy otevřu excel, kliknu import z csv a vyberu kodovani, bude vse ok.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Tlačítko filter se chová divně, když ho zkoučím na demu tak mi v url řádku zůstává stejná informace. Pokud si to pustím u mně tak se mi do url přidá ještě ?do=grid-filter-submitForm.Není tam někde js kód, který to v demu zachytí?

Jistě, je tam JS kód, který data posílá do handleru. Nefungovalo mi správně na formuláři onSuccess, tak jsem tam dal vlastní handler. Po filtrování se volá na gridu onFilter, takže je možné si tam přidat callback a ten se zavolá po odeslání filtrovacího formuláře. Na filtr formu ti nebude fungovat onSubmit, onSuccess ani onError.

tom
Člen | 171
+
0
-

mesour napsal(a):

tom napsal(a):

Dá se prosím při použití sortable callbacku nějak poznat, kterým záznamem „bylo pohybováno“? Nyní v tom poli data procházím a upravuji všechny záznamy (viz ukázka), což je OK. Ale hodilo by se mi při tom průchodu i vědět, který záznam to způsobil. Dá se to nějak?

Díky

Tohle už jsem řešil s jedním kolegou. Určitě tu možnost udělám, zatím to nelze. Nevím, zda to stihnu už ve verzi 1.4.3 ale mám to v plánu.

To by bylo perfektni. Dik

mesour
Nette Blogger | 236
+
+1
-

tom napsal(a):

mesour napsal(a):

tom napsal(a):

Dá se prosím při použití sortable callbacku nějak poznat, kterým záznamem „bylo pohybováno“? Nyní v tom poli data procházím a upravuji všechny záznamy (viz ukázka), což je OK. Ale hodilo by se mi při tom průchodu i vědět, který záznam to způsobil. Dá se to nějak?

Díky

Tohle už jsem řešil s jedním kolegou. Určitě tu možnost udělám, zatím to nelze. Nevím, zda to stihnu už ve verzi 1.4.3 ale mám to v plánu.

To by bylo perfektni. Dik

Už jsem to tam zapracoval, „Event \DataGrid\Grid::onSort now accepts second parametr item_id.“ Takže jako druhý parametr přijde do onSort ID řádku, který byl přesunutý ;-)

Viz verze 1.4.3: https://forum.nette.org/…vypsat-strom?p=3

Je to vidět i zde: http://grid.mesour.com/sort/ dole v public function sort je v poznámce napsáno: $item_id = ID of item which was moved

Editoval mesour (21. 10. 2014 13:54)

tom
Člen | 171
+
0
-

jazby napsal(a):

mesour napsal(a):

mpis napsal(a):

mesour napsal(a):

Právě to řeším. Ale s tím kódováním by mohl problém nastat, když CSV otevřeš a děláš z něj excel, tak je tam výběr kódování, tam je potřeba vybrat utf8. V CSV souboru jsou znaky správné i když jsem použil array. Právě instaluji excel, abych to vyzkoušel přímo na něm, ale na google drive mi to funguje správně i se to samo rozdělí do sloupců jak má.

Už tuším,kde je problém.
Ty popisuješ situaci, kdy provedeš export do CSV a soubor uložíš.
Potom při importu do excelu je v dialogu nabídka kódování. To je OK.
Ale já mluvím o případu, kdy ten export pošlu rovnou do excelu.
To se všechno dá do sloupce A bez rozdělení a se špatnou diakritikou.

Jak to myslíš pošleš rovnou do excelu? Export je do CSV, takže je z toho pak nutné excel udělat. Export přímo do excelu dělat nebudu, protože bych musel dávat součástí gridu nějakou PHP knihovnu pro práci s excelem a ty bývají opravdu velké a přeobjektované.

Stáhneš csv. Otevřeš jej přímo v excelu. Ten není chytrý a nepochopí že se jedná o CSV, ale vše narve do jednoho řádku. Následně se na to používá fce „text do sloupců“ která provede rozdělením na slupce. Jenže v tomto dialogu již poté není výběr kódování. Pokud zvolíš druhou cestu, tedy otevřu excel, kliknu import z csv a vyberu kodovani, bude vse ok.

Anebo použít OpenOffice, ten to otevírá správně

jazby
Člen | 44
+
0
-

Já osobně využívám LibreOffice. Ale to sem moc nepatří …, pouze jsem se pokusil vysvětlit jak se to děje. Podle mě toto totiž není problém, ale vlastnost. Kódování je správné, pouze Excel je hloupý a neporadí si s hodně csv.

tom napsal(a):

jazby napsal(a):

mesour napsal(a):

mpis napsal(a):

mesour napsal(a):

Právě to řeším. Ale s tím kódováním by mohl problém nastat, když CSV otevřeš a děláš z něj excel, tak je tam výběr kódování, tam je potřeba vybrat utf8. V CSV souboru jsou znaky správné i když jsem použil array. Právě instaluji excel, abych to vyzkoušel přímo na něm, ale na google drive mi to funguje správně i se to samo rozdělí do sloupců jak má.

Už tuším,kde je problém.
Ty popisuješ situaci, kdy provedeš export do CSV a soubor uložíš.
Potom při importu do excelu je v dialogu nabídka kódování. To je OK.
Ale já mluvím o případu, kdy ten export pošlu rovnou do excelu.
To se všechno dá do sloupce A bez rozdělení a se špatnou diakritikou.

Jak to myslíš pošleš rovnou do excelu? Export je do CSV, takže je z toho pak nutné excel udělat. Export přímo do excelu dělat nebudu, protože bych musel dávat součástí gridu nějakou PHP knihovnu pro práci s excelem a ty bývají opravdu velké a přeobjektované.

Stáhneš csv. Otevřeš jej přímo v excelu. Ten není chytrý a nepochopí že se jedná o CSV, ale vše narve do jednoho řádku. Následně se na to používá fce „text do sloupců“ která provede rozdělením na slupce. Jenže v tomto dialogu již poté není výběr kódování. Pokud zvolíš druhou cestu, tedy otevřu excel, kliknu import z csv a vyberu kodovani, bude vse ok.

Anebo použít OpenOffice, ten to otevírá správně

mpis
Člen | 65
+
0
-

mesour napsal(a):
Jak to myslíš pošleš rovnou do excelu? Export je do CSV, takže je z toho pak nutné excel udělat. Export přímo do excelu dělat nebudu, protože bych musel dávat součástí gridu nějakou PHP knihovnu pro práci s excelem a ty bývají opravdu velké a přeobjektované.

Už vím přesně, jak to je.
Porovnávám dva gridy – Grido grid a Mesour grid.
A rozdíl je ve formátu a kódování výstupních souborů.
Mesour má UTF8 a oddělovač čárku, a pak to dělá to co jsem popisoval.
Grido má unicode (dva byty na znak) a oddělovač tabulátor. Takže když ho otevřu přímo v excelu, tak je to hned správně bez meziukládání souboru.
A tím „pošleš rovnou do excelu“ myslím to, že když dám export, tak se zobrazí dialog prohlížeče, kde se ptá, zda otevřít v excelu nebo uložit.

FJP
Člen | 124
+
0
-

Ahoj,
potřeboval bych trošku poradit/navést, jak to použít-vložit do šablony.

Třeba toto http://grid.mesour.com/filter/.

Díky za tip.

tom
Člen | 171
+
+1
-

FJP napsal(a):

Ahoj,
potřeboval bych trošku poradit/navést, jak to použít-vložit do šablony.

Třeba toto http://grid.mesour.com/filter/.

Díky za tip.

Napr. tak, ze si udelas presenter, do ktereho tohle hodis. A v sablone toho presenteru zavolas {control filterDataGrid}

jestli teda pravne chapu dotaz.

mesour
Nette Blogger | 236
+
0
-

FJP napsal(a):

Ahoj,
potřeboval bych trošku poradit/navést, jak to použít-vložit do šablony.

Třeba toto http://grid.mesour.com/filter/.

Díky za tip.

Ahoj, co přesně myslíš tím použít-vložit do šablony. Stačí na gridu zavolat enableFilter() bez parametru a filtr se takhle vykreslí.

Pokud myslíš, jak vložit do šablony grid, takže dejme tomu třeba máš v presenteru metodu createComponentFilterDataGrid, jak je v tom odkazu, který jsi poslal. V templatě dáš pouze {control filterDataGrid} a grid se ti vykreslí. Je to componenta, takže se s ní i stejně pracuje v templatě.

FJP
Člen | 124
+
0
-

mesour napsal(a):

Pokud myslíš, jak vložit do šablony grid, takže dejme tomu třeba máš v presenteru metodu createComponentFilterDataGrid, jak je v tom odkazu, který jsi poslal. V templatě dáš pouze {control filterDataGrid} a grid se ti vykreslí. Je to componenta, takže se s ní i stejně pracuje v templatě.

S komponentou jsem ještě nepracoval, takže to si budu muset asi víc nastudovat, ale i tak mám v kódu:

<?php
...
protected function createComponentOrderingDataGrid($name) {

$selection = $this->db->table('events');

$source = new \DataGrid\NetteDbDataSource($selection); //limitation for \Nette\Database\Table\Selection

$grid = new \DataGrid\Grid($source, $presenter, $name);


    $source = new NetteDbDataSource($this->demo_model->getUserSelection());

    $table_id = 'events';

    $grid = new Grid($source, $this, $name);

    $grid->column(new Column\Text(array(
        Column\Text::ID => 'title',
        Column\Text::TEXT => 'Title',
    )));

    $grid->column(new Column\Text(array(
        Column\Text::ID => 'perex',
        Column\Text::TEXT => 'Perex',
    )));

    $grid->column(new Column\Text(array(
        Column\Text::ID => 'slug',
        Column\Text::TEXT => 'Slug'
    )));

    return $grid;
}
...
?>

Dostávám chybu:
Nette\InvalidArgumentException
Component with name ‚orderingDataGrid‘ does not exist.

mesour
Nette Blogger | 236
+
+1
-

FJP napsal(a):

mesour napsal(a):

Pokud myslíš, jak vložit do šablony grid, takže dejme tomu třeba máš v presenteru metodu createComponentFilterDataGrid, jak je v tom odkazu, který jsi poslal. V templatě dáš pouze {control filterDataGrid} a grid se ti vykreslí. Je to componenta, takže se s ní i stejně pracuje v templatě.

S komponentou jsem ještě nepracoval, takže to si budu muset asi víc nastudovat, ale i tak mám v kódu:

<?php
...
protected function createComponentOrderingDataGrid($name) {

$selection = $this->db->table('events');

$source = new \DataGrid\NetteDbDataSource($selection); //limitation for \Nette\Database\Table\Selection

$grid = new \DataGrid\Grid($source, $presenter, $name);


    $source = new NetteDbDataSource($this->demo_model->getUserSelection());

    $table_id = 'events';

    $grid = new Grid($source, $this, $name);

    $grid->column(new Column\Text(array(
        Column\Text::ID => 'title',
        Column\Text::TEXT => 'Title',
    )));

    $grid->column(new Column\Text(array(
        Column\Text::ID => 'perex',
        Column\Text::TEXT => 'Perex',
    )));

    $grid->column(new Column\Text(array(
        Column\Text::ID => 'slug',
        Column\Text::TEXT => 'Slug'
    )));

    return $grid;
}
...
?>

Dostávám chybu:
Nette\InvalidArgumentException
Component with name ‚orderingDataGrid‘ does not exist.

Za předpokladu, že máš v $this->db instanci \Nette\Database\Context by tvůj kód měl vypadat asi takto:

use DataGrid\NetteDbDataSource,
	DataGrid\Grid,
	DataGrid\Column;

class FooPresenter extends \Nette\Application\UI\Presenter{

	protected function createComponentOrderingDataGrid($name) {

		$selection = $this->db->table('events');

	    $source = new NetteDbDataSource($selection);

	    $grid = new Grid($source, $this, $name);

	    $grid->column(new Column\Text(array(
	        Column\Text::ID => 'title',
	        Column\Text::TEXT => 'Title',
	    )));

	    $grid->column(new Column\Text(array(
	        Column\Text::ID => 'perex',
	        Column\Text::TEXT => 'Perex',
	    )));

	    $grid->column(new Column\Text(array(
        Column\Text::ID => 'slug',
        Column\Text::TEXT => 'Slug'
    	)));

    	return $grid;
	}

}

Dejme tomu, že toto celé by bylo v classe FooPresenter, pak by obsah templaty /templates/Foo/default.latte byl:

{block content}

{control orderingDataGrid}

a neměl by nastat problém.

Editoval mesour (21. 10. 2014 16:15)

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

Tlačítko filter se chová divně, když ho zkoučím na demu tak mi v url řádku zůstává stejná informace. Pokud si to pustím u mně tak se mi do url přidá ještě ?do=grid-filter-submitForm.Není tam někde js kód, který to v demu zachytí?

Jistě, je tam JS kód, který data posílá do handleru. Nefungovalo mi správně na formuláři onSuccess, tak jsem tam dal vlastní handler. Po filtrování se volá na gridu onFilter, takže je možné si tam přidat callback a ten se zavolá po odeslání filtrovacího formuláře. Na filtr formu ti nebude fungovat onSubmit, onSuccess ani onError.

To odchycení je v grid.js, nebo si ho musím vyřešit sám. Pokud sám, kam mám potom směrovat handle.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Tlačítko filter se chová divně, když ho zkoučím na demu tak mi v url řádku zůstává stejná informace. Pokud si to pustím u mně tak se mi do url přidá ještě ?do=grid-filter-submitForm.Není tam někde js kód, který to v demu zachytí?

Jistě, je tam JS kód, který data posílá do handleru. Nefungovalo mi správně na formuláři onSuccess, tak jsem tam dal vlastní handler. Po filtrování se volá na gridu onFilter, takže je možné si tam přidat callback a ten se zavolá po odeslání filtrovacího formuláře. Na filtr formu ti nebude fungovat onSubmit, onSuccess ani onError.

To odchycení je v grid.js, nebo si ho musím vyřešit sám. Pokud sám, kam mám potom směrovat handle.

Odchycení je automatické a je zde: https://github.com/…lter_form.js samozřejmě je zcomprimované v /src/grid.js.

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

FJP
Člen | 124
+
0
-

mesour napsal(a):

a neměl by nastat problém.

Paráda, jede to ;) díky!

Editoval FJP (21. 10. 2014 16:30)

FJP
Člen | 124
+
0
-

Jinak mi nejde ordering (až po refreshi stránky). Dál jsem zkoušel filtering a tam se nerozbalí select boxy.
Mám php 5.4., nette 2.1.5, verze gridu 1.4.3

mesour
Nette Blogger | 236
+
0
-

FJP napsal(a):

Jinak mi nejde ordering (až po refreshi stránky). Dál jsem zkoušel filtering a tam se nerozbalí select boxy.
Mám php 5.4., nette 2.1.5, verze gridu 1.4.3

A splňuje tvá aplikace všechny požadavky v Required zde: http://grid.mesour.com/ ?

Jan Dlouhý
Člen | 2
+
0
-

Ahoj, nejprve bych rád poděkoval za super grid! Vážně dobrá práce, navíc s povedenou, přehlednou dokumentací.

Teď dotaz: U sortable tabulky mi nefunguje AJAX. Příčinou bude zřejmě to, že se mi z nějakého důvodu po odeslání požadavku vrací HTML celé stránky místo JSON snippetu. Netušíš, kde by mohla být chyba? (používám nejnovější verzi 1.4.3, všechny požadavky splněny).

<?php
protected function createComponentDataGrid($name)
{
	$source = new NetteDbDataSource($this->questionService->getSelection($this->language));
	$grid = new Grid($source, $this, $name);
	$grid->setPrimaryKey('id');
	$grid->enableSorting();
	$grid->onSort[] = $this->sort;

	$grid->column(new Column\Text(array(
		Column\Text::ID => 'number',
		Column\Text::TEXT => 'Číslo',
		Column\Text::ORDERING => FALSE
	)));

	$grid->column(new Column\Text(array(
		Column\Text::ID => 'name',
		Column\Text::TEXT => 'Popis',
		Column\Text::ORDERING => FALSE
	)));

	$grid->column(new Column\Text(array(
		Column\Text::ID => 'text',
		Column\Text::TEXT => 'Otázka',
		Column\Text::ORDERING => FALSE
	)));

	return $grid;
}
?>

Předem díky za pomoc!

mesour
Nette Blogger | 236
+
0
-

Jan Dlouhý napsal(a):

Ahoj, nejprve bych rád poděkoval za super grid! Vážně dobrá práce, navíc s povedenou, přehlednou dokumentací.

Teď dotaz: U sortable tabulky mi nefunguje AJAX. Příčinou bude zřejmě to, že se mi z nějakého důvodu po odeslání požadavku vrací HTML celé stránky místo JSON snippetu. Netušíš, kde by mohla být chyba? (používám nejnovější verzi 1.4.3, všechny požadavky splněny).

<?php
protected function createComponentDataGrid($name)
{
	$source = new NetteDbDataSource($this->questionService->getSelection($this->language));
	$grid = new Grid($source, $this, $name);
	$grid->setPrimaryKey('id');
	$grid->enableSorting();
	$grid->onSort[] = $this->sort;

	$grid->column(new Column\Text(array(
		Column\Text::ID => 'number',
		Column\Text::TEXT => 'Číslo',
		Column\Text::ORDERING => FALSE
	)));

	$grid->column(new Column\Text(array(
		Column\Text::ID => 'name',
		Column\Text::TEXT => 'Popis',
		Column\Text::ORDERING => FALSE
	)));

	$grid->column(new Column\Text(array(
		Column\Text::ID => 'text',
		Column\Text::TEXT => 'Otázka',
		Column\Text::ORDERING => FALSE
	)));

	return $grid;
}
?>

Předem díky za pomoc!

Vyzkoušel jsi do metody sort dát nakonec $this->redrawControl(); ?

tom
Člen | 171
+
+2
-

Chlapi, projděte si tady to fórum, řeší se to několikrát, autor chudák odpovídá stále dokola :-) Možná nakonec bude nejlepší do dema umístit ukázku ke staženi ;-)

mesour
Nette Blogger | 236
+
0
-

tom napsal(a):

Chlapi, projděte si tady to fórum, řeší se to několikrát, autor chudák odpovídá stále dokola :-) Možná nakonec bude nejlepší do dema umístit ukázku ke staženi ;-)

Jojo, to je fakt. Udělat nějaký sandbox ke stažení.

Také do dokumentace přidám něco jako „Implementation guide“ po jednom dnešním dotazu ;-)

Editoval mesour (21. 10. 2014 20:26)

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Tlačítko filter se chová divně, když ho zkoučím na demu tak mi v url řádku zůstává stejná informace. Pokud si to pustím u mně tak se mi do url přidá ještě ?do=grid-filter-submitForm.Není tam někde js kód, který to v demu zachytí?

Jistě, je tam JS kód, který data posílá do handleru. Nefungovalo mi správně na formuláři onSuccess, tak jsem tam dal vlastní handler. Po filtrování se volá na gridu onFilter, takže je možné si tam přidat callback a ten se zavolá po odeslání filtrovacího formuláře. Na filtr formu ti nebude fungovat onSubmit, onSuccess ani onError.

To odchycení je v grid.js, nebo si ho musím vyřešit sám. Pokud sám, kam mám potom směrovat handle.

Odchycení je automatické a je zde: https://github.com/…lter_form.js samozřejmě je zcomprimované v /src/grid.js.

Nějak se mi tam tloukly javascripty. Už je to lepší, ale stejně to nefiltruje. Proměnné z formuláře se do Gridu dostanou, ale podle výsledku co vidím tak v Gridu zůstane ten source, který se načte před vytvořením gridu.

			$selection = $this->getSelectData();
			$selection->where('Pieces.Interprets.IdInterpret', $interpretKod[0]);
			$selection->where('PlayDateTime BETWEEN ? AND ?', $years[0] . '-01-01', $years[0] . '-12-31');

			$source = new NetteDbDataSource($selection);
			$grid = new Grid($source, $this, $name);

			//$grid->setFilterForm('filterForm', FALSE);
			$grid->enableFilter($this['filterForm'], __DIR__ . '/../templates/components/filterForm.latte');

			$grid->setDefaultOrder('IdPiece', 'ASC');

			$filter_values = $grid->getFilterValues();
			//using custom filtering
			if (empty($filter_values) === FALSE) {
				$selection = $this->getSelectData();
				if ($filter_values['interpret']) {
					$selection->where('Pieces.Interprets.IdInterpret', $filter_values['interpret']);
				}
				if ($filter_values['piece']) {
					$selection->where('Pieces.IdPiece', (int) $filter_values['piece']);
				}
				if ($filter_values['broadcast']) {
					$selection->where('Broadcasts.IdBroadcast', (int) $filter_values['broadcast']);
				}
				if ($filter_values['station']) {
					$selection->where('Broadcasts.Stations.IdStation', (int) $filter_values['station']);
				}
				if ($filter_values['payer']) {
					$selection->where('Broadcasts.Stations.Payers.IdPayer', (int) $filter_values['payer']);
				}
				if ($filter_values['years']) {
					$selection->where('YEAR(PlayDateTime)', (int) $filter_values['years']);
				}
				if ($filter_values['datefrom'] && $filter_values['dateto']) {
					$dtFrom = \Nette\DateTime::from($filter_values['datefrom']);
					$dtTo = \Nette\DateTime::from($filter_values['dateto']);
					$selection->where('PlayDateTime BETWEEN ? AND ?', $dtFrom->format('Y-m-d'), $dtTo->format('Y-m-d'));
				}
				$source = new NetteDbDataSource($selection);
			}
mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Tlačítko filter se chová divně, když ho zkoučím na demu tak mi v url řádku zůstává stejná informace. Pokud si to pustím u mně tak se mi do url přidá ještě ?do=grid-filter-submitForm.Není tam někde js kód, který to v demu zachytí?

Jistě, je tam JS kód, který data posílá do handleru. Nefungovalo mi správně na formuláři onSuccess, tak jsem tam dal vlastní handler. Po filtrování se volá na gridu onFilter, takže je možné si tam přidat callback a ten se zavolá po odeslání filtrovacího formuláře. Na filtr formu ti nebude fungovat onSubmit, onSuccess ani onError.

To odchycení je v grid.js, nebo si ho musím vyřešit sám. Pokud sám, kam mám potom směrovat handle.

Odchycení je automatické a je zde: https://github.com/…lter_form.js samozřejmě je zcomprimované v /src/grid.js.

Nějak se mi tam tloukly javascripty. Už je to lepší, ale stejně to nefiltruje. Proměnné z formuláře se do Gridu dostanou, ale podle výsledku co vidím tak v Gridu zůstane ten source, který se načte před vytvořením gridu.

No jasně, protože je potřeba volat ->where přímo na $source a ne na $selection ;-) To by mělo problém vyřešit ;-)

$source = new NetteDbDataSource($selection); tenhle řádek na konci je tam zbytečný, nemá žádný účinek. Jak jsem už psal, source jde do gridu přes referenci, takže stačí:

$selection = $this->getSelectData();
//...
$source = new NetteDbDataSource($selection);
$grid = new Grid($source, $this, $name);
// ...
$filter_values = $grid->getFilterValues();
//using custom filtering
if (empty($filter_values) === FALSE) {
	if ($filter_values['interpret']) {
        $source->where('Pieces.Interprets.IdInterpret', $filter_values['interpret']);
		// pokud tady něco změním na $source, tak se to projeví v gridu
    }
	//...
}

Pro info, NetteDbDataSource::where bere stejné parametry jako selection::where. Stejně je to i u DibiDataSource::where, bere stejné parametry jako DibiFluent::where ;-)

Editoval mesour (21. 10. 2014 21:57)

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Tlačítko filter se chová divně, když ho zkoučím na demu tak mi v url řádku zůstává stejná informace. Pokud si to pustím u mně tak se mi do url přidá ještě ?do=grid-filter-submitForm.Není tam někde js kód, který to v demu zachytí?

Jistě, je tam JS kód, který data posílá do handleru. Nefungovalo mi správně na formuláři onSuccess, tak jsem tam dal vlastní handler. Po filtrování se volá na gridu onFilter, takže je možné si tam přidat callback a ten se zavolá po odeslání filtrovacího formuláře. Na filtr formu ti nebude fungovat onSubmit, onSuccess ani onError.

To odchycení je v grid.js, nebo si ho musím vyřešit sám. Pokud sám, kam mám potom směrovat handle.

Odchycení je automatické a je zde: https://github.com/…lter_form.js samozřejmě je zcomprimované v /src/grid.js.

Nějak se mi tam tloukly javascripty. Už je to lepší, ale stejně to nefiltruje. Proměnné z formuláře se do Gridu dostanou, ale podle výsledku co vidím tak v Gridu zůstane ten source, který se načte před vytvořením gridu.

No jasně, protože je potřeba volat ->where přímo na $source a ne na $selection ;-) To by mělo problém vyřešit ;-)

$source = new NetteDbDataSource($selection); tenhle řádek na konci je tam zbytečný, nemá žádný účinek. Jak jsem už psal, source jde do gridu přes referenci, takže stačí:

$selection = $this->getSelectData();
//...
$source = new NetteDbDataSource($selection);
$grid = new Grid($source, $this, $name);
// ...
$filter_values = $grid->getFilterValues();
//using custom filtering
if (empty($filter_values) === FALSE) {
	if ($filter_values['interpret']) {
        $source->where('Pieces.Interprets.IdInterpret', $filter_values['interpret']);
		// pokud tady něco změním na $source, tak se to projeví v gridu
    }
	//...
}

Pro info, NetteDbDataSource::where bere stejné parametry jako selection::where. Stejně je to i u DibiDataSource::where, bere stejné parametry jako DibiFluent::where ;-)

Jojo tohle chápu, jen mám problém, když ty podmínky přidávám na ten source tak mi přijde, že se neaplikují.
Pokud ty podmínky dám na selection a ten pak převedu na source, tak to funguje dobře a rychle. Pokud ty podmínky dám na source tak mi stránka padne na překročení časového limitu, nebo se vyčerpá paměť.

Tak jsem to vyřešil, předfiltruji si data s minimálním omezením a potom už to funguje.

Editoval svobodai (22. 10. 2014 11:53)

Jan Dlouhý
Člen | 2
+
+1
-

Omlouvám se za opakování dotazu, pomohlo to, díky moc.

Řešil jsem docela dlouho, proč se mi snippet nepřekresluje, tak kdyby to nefungovalo ještě někomu, tak tady je můj problém a řešení:
Grid používám v modulu Admin a v ID snippetu je znak : (ID vypadá takto: snippet-nazevKomponenty-Modul:PresenternazevKomponenty) což je pro jQuery ID selector nepřípustné – v metodě updateSnippet tedy selectorem $(‚#‘ + id) nic nenajde. Stačí teda přepsat na $(document.getElementById(id)).

Editoval Jan Dlouhý (22. 10. 2014 10:32)