Nový Nette DataGrid pro Bootstrap s možností vypsat strom
- mesour
- Nette Blogger | 236
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
Zdravím, vyšla nová verze 1.4.2 a s ní některé bug fixy, nový Status column, který nahradil deprecated Action column: http://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
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
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)
- tom
- Člen | 171
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
- mesour
- Nette Blogger | 236
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
- mesour
- Nette Blogger | 236
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
- mesour
- Nette Blogger | 236
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
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
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(); ?
- mesour
- Nette Blogger | 236
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
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
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
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
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)