Nextras\Datagrid – datagrid se vsim jak ma byt
- MW
- Člen | 626
Prosím o radu:
možná na to jdu špatně.
Dělám si podporu pro tisk. V šabloně print.latte kde mam do samé co
například v default.latte +
A v gridu jsem si udělal link
A v presenteru
Což samozřejmě zobrazí grid v default stavu. Lze nějak chytře předat stav? (filtry, page a pod?)
Nebo jak chytře řesit tisk, prosim ?
Diky !
Editoval MW (10. 7. 2013 17:23)
- Vojtěch Dobeš
- Gold Partner | 1316
Nejsnazší cestou bude, jak zmínil jiri.pudil, vytvořit tiskový stylopis. Pak nemusíš mít pro tisk separátní šablonu, uživatel prostě v prohlížeči dá Tisk (lze mu na to udělat i tlačítko javascriptem) a stránka se vytiskne v upravené podobě tak, jak řeknem v CSS. Ideální způsob vytvoření tiskového stylopisu je pomocí media queries v hlavním stylopisu, aby se kvůli němu nedělal zbytečný HTTP request navíc (prohlížeče tiskový stylopis stáhnou, i když uživatel tisknout nechce).
Dobrý užitečný základ pro tiskový stylopis lze najít v HTML5 Boilerplatu.
Editoval vojtech.dobes (11. 7. 2013 0:26)
- mrtnzlml
- Člen | 140
Ahoj. Nahrazuji datagridem původní šablony, kde se vše renderovalo ručně. Snažím se to udělat tak, aby byl výsledek úplně stejný (a díky datagridu lepší). Lze nějak nadefinovat (třeba v šabloně pomocí addCellsTemplate) co bude grid vykreslovat, když je prázdný? Takto se vykresluje normálně tabulka bez dat a musím do šablony (podle mě zbytečně) ještě tahat informaci o tom, že žádná data neexistují. Bylo by docela cool, kdyby v případě prázdných dat byl třeba místo formuláře <p> a v něm nějaká hláška…
- hrach
- Člen | 1842
@mrtnzlml: no, pokud jde o samotnou tabulku (tedy hlavicku, etc), tak nemam v planu zavadet nejakou monost, ze by se nevykreslila. Pokud jde o to, ze by byl treba vykreslen samotny radek s jednou dlouho bunkou, ze data najsou, tak to je v planu (aby to bylo taky modifikovatelne).
- mrtnzlml
- Člen | 140
Hm, to je škoda. Zeptám se tedy jaký je nejlepší způsob jak to řešit?
Takto to řeším teď a vzešlo to z původního řešení, kdy se nepoužíval datagrid. Ale teď se mi to nelíbí, abych se v každém callbacku ptal znovu na data a ještě si to posílal do šablony. Zvlášť když jsou data z externího zdroje, kdy nelze uplatnit limit (a jsou ve formátu array())…
- buffus
- Člen | 101
Používám Nette 2.0.11, Nextras/Datagrid, jQuery v1.9.1, nette.ajax.js
v1.2.2 a i kód z ukázky v dokumentaci
Possible NAIVE implementation for Nette\Database could look
like this:
Potřeboval bych v Datagridu vypsat výchozí výpis sestupně podle id a zároveň i funkční enableSort.
Pokud zadám
$selection = $this->connection->table('zakazka')->where($filters)->order('id DESC');
nebo do
$order = array('id DESC');
vypíše datagrid sice výpis sestupně podle id, ale přestane u všech
sloupců fungovat enableSort
$grid->addColumn('id', 'UID')->enableSort();
,
který před použitím order
funguje.
Můžete mi prosím někdo pomoci?
- buffus
- Člen | 101
Prosím ještě o radu. Dávám to do vlákna Nextras\Datagridu, protože jsem při jeho používání na můj problém narazil u createComponentDatagrid(), ale jinak tuším, že v mém případě půjde spíše o začátečnický problém s OOP/PHP.
Úryvek kódu:
Pokud v řádce:
vypíšu pole ručně, např. pokračuji kódem:
filtr funguje (musím filtr takto řešit, pač jde o cizí tabulku a v podstatě filtruji id těch měst).
Ale pokud zadám pole jako dotaz do DB (používám NDB Nette 2.0.11):
Laděnka vyhodí:
Fatal Error – Using $this when not in object context
a i Phpstorm $this červeně podtrhne s bublinou:
„$this in Closure is allowed in PHP5.4 only“
Tomu rozumím, ale poradit si neumím. Vyvíjím na PHP5.3 (to můžu změnit), ale na produkci mají teď 5.3 a s tím jen tak nehnu. Server ale nechci na fóru řešit, to se poddá, ale uvítal bych radu, jak to pole naplnit přes fetchPairs dotaz, aby fungoval i teď na pHP5.3. Předem díky.
- buffus
- Člen | 101
@enumag: Díky moc za nasměrování, už to frčí. @hrach: Věř mi, že jsem u mého problému nad novým vláknem přemýšlel… A určitě Ti toto vlákno nechci spamovat. Ale OK, přijímám napomenutí a slibuji, že budu šířit slávu Tvého skvělého Datagridu mými jalovými dotazy i v jiných vláknech a fórech.
- rixi
- Člen | 109
hrach wrote:
bohuzel moc nejde. na co to presne potrebujes? vim, ze je to hloupe, zkusim jeste popremyslet, jak to vyresit.
Z hlavy ma napadlo http://getbootstrap.com/css/#… , pridavanie classov na riadky by som urcite vyuzil.
- Quinix
- Člen | 108
hrach napsal(a):
bohuzel moc nejde. na co to presne potrebujes? vim, ze je to hloupe, zkusim jeste popremyslet, jak to vyresit.
Chtěli jsme k řádkům přidat „data-href“ a udělat je celé proklikávací na editaci… zatim to mam vyřešené jinak, ale vlastní attr k <tr> by byl nejlepší. Co to udělat stejně jako je definování vlastního otevíracího tagu <table>?
- MW
- Člen | 626
Zdravím a prosím o pomoc.
Mam grid kam bych si rad pripojil podle ID z jiné tabulky NAME.
Rekneme tabulka CARS kde je sloupec branches_id a tabulka BRANCHES, která ma NAME.
Jak to spravne pripojit a zachovat funkcni inline editaci? Bez inline editace to umim přes SELECT() tedy to udela spravny JOIN.
Tedy do gridu pridavam:
v datasource mam
a i jsem si udelal v editFormFactory
Ale potrebuji mit v gridu NAME a ne Id …
Pokud to zkusim přes JOIN v Datasourcu, nedari se me to udelat spravne..
Dekuji
- vvoody
- Člen | 910
Cell rendering si naštuduj v dokumentácií. A ten addSelect máš správne, tak ako si ho napísal ho pridaj do setEditFormFactory. Podstatné je aby identifikátor inputu bol zhodný s identifikátorom stĺpca, čiže branches_id.
- MW
- Člen | 626
Takto jsem poresil moznost zadavat počet zobrazenych stranek. Takto to
i funguje..
Ale po tom, co jsem to takto implementoval do existujici aplikace, do casti
prezenteru, me to prestalo fungovat.
Jediny rozdil je v tom, ze presenter ma formular, kde zvolim rok a přes setview() to poslu na sablonu, kde nacitam control s gridem.
Pokud to krokuju, tak po zavolani
se me jiz nevvytvari znovu componenta Users..
Když to mam v cistem presenteru, tak to pokazde jde na
Prosim o radu…
Tady je kod:
presenter:
a továrně pak:
do šablony zkušebně pak:
Editoval MW (22. 8. 2013 13:46)
- enumag
- Člen | 2118
@Milo: Ne že bych to v praxi sám používal, ale udělal bych to tak jak píše @hrach s tím že bych to pomocí absolutního pozicování vytáhl mimo tu buňku aby se zbytečně nenatahovala. V podstatě si to představuju tak že by pod inputem vyjela bublina s chybou. (Hrachův datagrid to tak možná dělá – nepoužívám jej takže to nevím.)
- MW
- Člen | 626
Zdravím, a prosím o pomoc.. zasekl jsem se :/
V presenteru mám formulář se zadáním roku a po odeslani nastavim view na sablonu s komponentou gridu.
Ja potrebuji nekam podstrcit parametr $year do metody getData v modelu a pridat ji do selectu.
Jak na to prosim?
EDIT:
sice se v modelu dostanu na $_POST[‚year‘], ale to asi není spravne reseni
…
volani
se me nedari rozsirit o napr getDataSource($this->year) .. nebo nevim jak na to
v presenteru mám komponentu:
zde mam také persistentni parametr $year
a model pak podle vzoru:
Editoval MW (27. 8. 2013 18:38)
- Milo
- Nette Core | 1283
Pardon, chybělo mi tam return. Opravil jsem.
setDatasourceCallback()
chce jako parametr callback (něco, co
může zavolat). Volání
$this->context->invoicesModel->getDataSource($this->year)
vrací data, takže předáváš data.
Předpokládám, že InvocesModel dědí od Nette\Object. Proto Ti funguje
$this->context->invoicesModel->getDataSource
. Kdyby
nedědil, tak getDataSource
je nedefinovaná proměná.
Nette\Object se podívá, jestli existuje metoda getDataSource
a
namísto chyby o nedefinované proměnné vrátí callback na tu metodu.
- MW
- Člen | 626
Super! diky…
$year jsem tam konecne dostal a funguje …
Az na paginator.. zas asi delam něco blbe :/
Moc prosim ještě o pomoc..
Vypada to ze getDataSource vůbec Paginator nedostane..
EDIT: Paginator se přitom vykresli, i sedi počet stranek,
jaky by mel byt, filtr funguje, jen proste zobrazi vse :/
a v podmínce
je $paginator NULL :/
Diky !
Presenter:
a model:
Editoval MW (28. 8. 2013 11:38)
- Filip111
- Člen | 244
@hrach:
Ahoj, předně díky za perfektní grid – nahradil jsem tím spoustu starých
tabulkových výpisů a vše šlape jak má. Po víc jak půl roce používání
můžu jedině doporučit.
Co se mi nejvíc líbí, jsou bloky pro každý sloupec definované
v šabloně. Můžu se tam vyblbnout jak potřebuju. Dál je pro mě naprosto
super vlastností libovolný formát vypisovaných dat – je jedno jestli je
řádek pole, vlastní class, entita Doctrine, LeanMapperu…vše mám
vyzkoušené.
K otázce: stále plánuješ, případně kdy přidání
podpory pro víceřádkové akce?
V issues na githubu i v diskuzi už to zaznělo, ale jen jednou a před
docela dlouhou dobou.
Díky.
- jiri.pudil
- Nette Blogger | 1034
Vypada to ze getDataSource vůbec Paginator nedostane..
Když si ho tam nepředáš, nediv se, že tam není.