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

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
bezsebesam
Člen | 8
+
0
-

jazby napsal(a):

Do Gridu právě přibyla nová funkcionalita Custom translator

Volání

$grid->setTranslator($myTranslator);

Očekáván interface \Nette\Localization\ITranslator.

Přeloženy budou následně veškeré textové názvy sloupců, buttonů, title u statusů, akce u selection atp. Snad bude k prospěchu.

Změna je v „dev-master“.

Super, vypadá to dobře.

Můžu se ještě připomenout s těmi ostatními dotazy, které jsem měl? Bylo to ohledně načtení dat z jiné tabulky přes cizí klíč, šířky sloupců a filtrů.

svobodai
Člen | 136
+
0
-

bezsebesam napsal(a):

Můžu se ještě připomenout s těmi ostatními dotazy, které jsem měl? Bylo to ohledně načtení dat z jiné tabulky přes cizí klíč, šířky sloupců a filtrů.

Ohledně načtení dat z jiné tabulky je to jednoduché pokud používáš NetteDatabase a pokud máš právně udělané tabulky viz database-selection.
Co se týče šířky sloupců tam to musíš řešit přes CSS.

bezsebesam
Člen | 8
+
0
-

svobodai napsal(a):

bezsebesam napsal(a):

Můžu se ještě připomenout s těmi ostatními dotazy, které jsem měl? Bylo to ohledně načtení dat z jiné tabulky přes cizí klíč, šířky sloupců a filtrů.

Ohledně načtení dat z jiné tabulky je to jednoduché pokud používáš NetteDatabase a pokud máš právně udělané tabulky viz database-selection.
Co se týče šířky sloupců tam to musíš řešit přes CSS.

Můžeš sem prosím hodit nějakou jednoduchou ukázku ohledně toho provázání tabulek? Díky.

svobodai
Člen | 136
+
0
-

bezsebesam napsal(a):

svobodai napsal(a):

bezsebesam napsal(a):

Můžu se ještě připomenout s těmi ostatními dotazy, které jsem měl? Bylo to ohledně načtení dat z jiné tabulky přes cizí klíč, šířky sloupců a filtrů.

Ohledně načtení dat z jiné tabulky je to jednoduché pokud používáš NetteDatabase a pokud máš právně udělané tabulky viz database-selection.
Co se týče šířky sloupců tam to musíš řešit přes CSS.

Můžeš sem prosím hodit nějakou jednoduchou ukázku ohledně toho provázání tabulek? Díky.

Toto je kód v PHP

$selection = $this->database->table('PlayLists');
$selection->select(
	'PlayCount, Pieces.IdPiece IdPiece, Pieces.Name PieceName, Pieces.ISRC , Pieces.OZ ,Pieces.Interprets.Name InterpretName, ' .
	'Broadcasts.IdBroadcast IdBroadcast, Broadcasts.Name BroadcastName, ' .
	'Broadcasts.Stations.IdStation IdStation, Broadcasts.Stations.Name StationName, ' .
	'Broadcasts.Stations.Payers.IdPayer IdPayer, Broadcasts.Stations.Payers.Name PayerName');

a tomu odpovídající SQL

SELECT [PlayCount],[Pieces].[IdPiece]
[IdPiece], [Pieces].[Name] [PieceName], [Pieces].ISRC , [Pieces].OZ ,[Interprets].[Name]
[InterpretName], [Broadcasts].[IdBroadcast] [IdBroadcast], [Broadcasts].[Name] [BroadcastName],
[Stations].[IdStation] [IdStation], [Stations].[Name] [StationName], [Payers].[IdPayer] [IdPayer],
[Payers].[Name] [PayerName]
FROM [PlayLists]
LEFT JOIN [Pieces] ON [PlayLists].[Pieces_IdPiece] = [Pieces].[IdPiece]
LEFT JOIN [Interprets] ON [Pieces].[Interprets_IdInterpret] = [Interprets].[IdInterpret]
LEFT JOIN [Broadcasts] ON [PlayLists].[Broadcasts_IdBroadcast] = [Broadcasts].[IdBroadcast]
LEFT JOIN [Stations] ON [Broadcasts].[Stations_IdStation] = [Stations].[IdStation]
LEFT JOIN [Payers] ON [Stations].[Payers_IdPayer] = [Payers].[IdPayer]
mesour
Nette Blogger | 236
+
0
-

bezsebesam napsal(a):

Můžu se ještě připomenout s těmi ostatními dotazy, které jsem měl? Bylo to ohledně načtení dat z jiné tabulky přes cizí klíč, šířky sloupců a filtrů.

Co se Týce sirky sloupců kdyz mají stejný název, jen jsou v jiném gridu, můžu přidávat na grid classu podle nazvu componenty, pak by selector vypadal třeba: .userDataGrid .column-name. Tohle by melo stačit. Az budu dělat nejaky update tak to zapracuji.

FJP
Člen | 124
+
0
-

jazby napsal(a):

EDIT
Zapoměl jsem dodat, že v 5.3 přiřazním $that = $this měníš viditelnost, takže pokud máš $this->termId jako private nebo protected, nepůjde přečíst.
Změnou je bud $that->termId nstavit jako public, nebo takto:

Verze 2 pro 5.3

$that = $this;
$termId = $this->termId;
Column\Text::CALLBACK => function($row) use ($that, $termId) {
    return $that->registrationInfo($termId, $row['id'])->amountofregistered;
}

Díky, jazby, to s viditelností pomohlo :)

FJP
Člen | 124
+
0
-

TIP:
Bylo by možné zrealizovat ordering i u sloupce, který načítá data přes callback? (viz. můj příspěvek výše)

mesour
Nette Blogger | 236
+
0
-

FJP napsal(a):

TIP:
Bylo by možné zrealizovat ordering i u sloupce, který načítá data přes callback? (viz. můj příspěvek výše)

Tohle není možné, jelikož ordering se posílá do SQL za ORDER BY.

bezsebesam
Člen | 8
+
0
-

svobodai napsal(a):

bezsebesam napsal(a):

svobodai napsal(a):

bezsebesam napsal(a):

Můžu se ještě připomenout s těmi ostatními dotazy, které jsem měl? Bylo to ohledně načtení dat z jiné tabulky přes cizí klíč, šířky sloupců a filtrů.

Ohledně načtení dat z jiné tabulky je to jednoduché pokud používáš NetteDatabase a pokud máš právně udělané tabulky viz database-selection.
Co se týče šířky sloupců tam to musíš řešit přes CSS.

Můžeš sem prosím hodit nějakou jednoduchou ukázku ohledně toho provázání tabulek? Díky.

Toto je kód v PHP

$selection = $this->database->table('PlayLists');
$selection->select(
	'PlayCount, Pieces.IdPiece IdPiece, Pieces.Name PieceName, Pieces.ISRC , Pieces.OZ ,Pieces.Interprets.Name InterpretName, ' .
	'Broadcasts.IdBroadcast IdBroadcast, Broadcasts.Name BroadcastName, ' .
	'Broadcasts.Stations.IdStation IdStation, Broadcasts.Stations.Name StationName, ' .
	'Broadcasts.Stations.Payers.IdPayer IdPayer, Broadcasts.Stations.Payers.Name PayerName');

a tomu odpovídající SQL

SELECT [PlayCount],[Pieces].[IdPiece]
[IdPiece], [Pieces].[Name] [PieceName], [Pieces].ISRC , [Pieces].OZ ,[Interprets].[Name]
[InterpretName], [Broadcasts].[IdBroadcast] [IdBroadcast], [Broadcasts].[Name] [BroadcastName],
[Stations].[IdStation] [IdStation], [Stations].[Name] [StationName], [Payers].[IdPayer] [IdPayer],
[Payers].[Name] [PayerName]
FROM [PlayLists]
LEFT JOIN [Pieces] ON [PlayLists].[Pieces_IdPiece] = [Pieces].[IdPiece]
LEFT JOIN [Interprets] ON [Pieces].[Interprets_IdInterpret] = [Interprets].[IdInterpret]
LEFT JOIN [Broadcasts] ON [PlayLists].[Broadcasts_IdBroadcast] = [Broadcasts].[IdBroadcast]
LEFT JOIN [Stations] ON [Broadcasts].[Stations_IdStation] = [Stations].[IdStation]
LEFT JOIN [Payers] ON [Stations].[Payers_IdPayer] = [Payers].[IdPayer]

To by asi šlo. Díky.
Mě jen zajímalo, jestli neexistuje něco, jako je v Grido metoda setColumn(), viz http://o5.github.io/…tion.cs.html#…

svobodai
Člen | 136
+
+1
-

bezsebesam napsal(a):

To by asi šlo. Díky.
Mě jen zajímalo, jestli neexistuje něco, jako je v Grido metoda setColumn(), viz http://o5.github.io/…tion.cs.html#…

Ne není, jde to udělat jinak jen musíš napsat co konkrétně chceš.
Bylo by dobré kdyby autoři různých gridů se domluvili a udělali jeden, protože jsou některé věci, které se mi líbi na tomto GRIDu, jiné zase na GRIDO, a jiné zase na NEXTRAS, kdyby se to dalo dohromady byl by to špičkový DataGrid.

FJP
Člen | 124
+
0
-

mesour napsal(a):

FJP napsal(a):

TIP:
Bylo by možné zrealizovat ordering i u sloupce, který načítá data přes callback? (viz. můj příspěvek výše)

Tohle není možné, jelikož ordering se posílá do SQL za ORDER BY.

Ajo, to mi nedošlo.

Jinak, při použití selectBoxu v custom filter nezůstává odeslaná hodnota.

mpis
Člen | 65
+
0
-

svobodai napsal(a):

Bylo by dobré kdyby autoři různých gridů se domluvili a udělali jeden, protože jsou některé věci, které se mi líbi na tomto GRIDu, jiné zase na GRIDO, a jiné zase na NEXTRAS, kdyby se to dalo dohromady byl by to špičkový DataGrid.

A ještě nezapomenout na Nifty grid se subgridy v řádku, ale zase nemá arraysource.
Tyto čtyři dát dohromady, to by byla bezkonkurenční lahůdka.

mesour
Nette Blogger | 236
+
0
-

FJP napsal(a):

mesour napsal(a):

FJP napsal(a):

TIP:
Bylo by možné zrealizovat ordering i u sloupce, který načítá data přes callback? (viz. můj příspěvek výše)

Tohle není možné, jelikož ordering se posílá do SQL za ORDER BY.

Ajo, to mi nedošlo.

Jinak, při použití selectBoxu v custom filter nezůstává odeslaná hodnota.

Aha, tak to je bug. Jakmile se ke tomu dostanu, tak to fixnu. Díky za upozornění :)

jazby
Člen | 44
+
0
-

svobodai napsal(a):
Ne není, jde to udělat jinak jen musíš napsat co konkrétně chceš.
Bylo by dobré kdyby autoři různých gridů se domluvili a udělali jeden, protože jsou některé věci, které se mi líbi na tomto GRIDu, jiné zase na GRIDO, a jiné zase na NEXTRAS, kdyby se to dalo dohromady byl by to špičkový DataGrid.

Krásná myšlenka. Ale jednak spíše nereálná a hlavně by pak z toho byl trochu kladivo na komára. To spíše bude lepší, pokud si jasně definujeme co od toho Gridu kdo očekává a dle toho si řekneme co lze udělat a co už je zbytečné. Naším cílem je určitě udělat použitelný grid, který uspokojí drtivou většinu požadavků. Osobně ostatní gridy neznám ani jsem je nikdy nezkoušel, pouze jsem je proklikal na doplňcích a zběžně si je ohodnotil (bez stažení). Nevím tedy přesně jaké výhody má Grid X a jaké Y…

Pokud tedy má někdo nápad na nové funkce, či mu něco nevyhovuje, návrhy určitě pište, případně se zapojte rovnou do vývoje :).

mpis napsal(a):
A ještě nezapomenout na Nifty grid se subgridy v řádku, ale zase nemá arraysource.
Tyto čtyři dát dohromady, to by byla bezkonkurenční lahůdka.

Já pro své projekty využívám grid který jsme si napsali namíru pro naše účely. Umí filtrovat, sortovat a mazat + umí ajaxové subgridy. Ale není to ve stavu kdy by to jednoduše šlo udělat jako doplněk (navíc tho umí málo), takže jeho otevření nemá smysl.
Každopádně „subridy“ jsou užitečná věc a jejich zavedení bych rád prosadil i do MGrida.

Editoval jazby (4. 11. 2014 10:54)

svobodai
Člen | 136
+
0
-

jazby napsal(a):

Krásná myšlenka. Ale jednak spíše nereálná a hlavně by pak z toho byl trochu kladivo na komára. To spíše bude lepší, pokud si jasně definujeme co od toho Gridu kdo očekává a dle toho si řekneme co lze udělat a co už je zbytečné. Naším cílem je určitě udělat použitelný grid, který uspokojí drtivou většinu požadavků. Osobně ostatní gridy neznám ani jsem je nikdy nezkoušel, pouze jsem je proklikal na doplňcích a zběžně si je ohodnotil (bez stažení). Nevím tedy přesně jaké výhody má Grid X a jaké Y…

Pokud tedy má někdo nápad na nové funkce, či mu něco nevyhovuje, návrhy určitě pište, případně se zapojte rovnou do vývoje :).

mpis napsal(a):
A ještě nezapomenout na Nifty grid se subgridy v řádku, ale zase nemá arraysource.
Tyto čtyři dát dohromady, to by byla bezkonkurenční lahůdka.

Já pro své projekty využívám grid který jsme si napsali namíru pro naše účely. Umí filtrovat, sortovat a mazat + umí ajaxové subgridy. Ale není to ve stavu kdy by to jednoduše šlo udělat jako doplněk (navíc tho umí málo), takže jeho otevření nemá smysl.
Každopádně „subridy“ jsou užitečná věc a jejich zavedení bych rád prosadil i do MGrida.

No já jsem v rámci dvou projektů vyzkoušel prakticky i jiné.
co bych chtěl za funkcionality
možnost prototypování hlaviček a sloupců jako je u GRIDO, tím si již v prezenteru mohu přidat formáty jako šířka sloupce, zarovnání buňky případně přidat CSS styl, stačilo by mi i jen přidání CSS class

načítání dat do GRIDu přes callback jako je u NEXTRAS, o tom už jsem psal. Není potom nutno řešit kdo co použije za zdroj dat, protože si to vyřeší v té callback funkci.

Zatím co jsem prakticky vyzkoušel tak mi tento grid vyhovuje nejlépe.

tom
Člen | 171
+
0
-

Bylo by prosím možné, aby v případě, že datasource nenabízí žádná data, tak vypsat nějaký uživatelský alert? Jestli jsem to někde přehlédl tak se omlouvám.

Díky

svobodai
Člen | 136
+
0
-

Potřeboval bych do hlavičky některých sloupců přidat span s tooltipem. Jak by se to dalo udělat, nebo jak by se to dalo vyřešit jinak.

vymak
Člen | 92
+
0
-

Ahoj, díky za super grid ale potřeboval bych trochu poradit.

Mám tento grid v samostané komponentě, tedy ne přímo v presenteru. Můj problém je že netusím jak zavolat handle metodu přímo v komponentě.

$web = 'web';

$deactivateButton = new Button();
$deactivateButton->setType('btn-danger')
                 ->setIcon('glyphicon-trash')
                 ->setTitle('Smazat')
                 ->addAttribute('href', new Link(array(
                         Link::HREF => 'deactivate!',
                         Link::PARAMS => array(
                                   'id' => '{' . $tableId . '}'
                         			)
                 				)))
                 ->addAttribute('data-confirm', 'modal')
                 ->addAttribute('data-confirm-ok-text', 'Deaktivovat')
                 ->addAttribute('data-confirm-title', 'Deaktivovat partnera?')
                 ->addAttribute('data-confirm-text', 'Opravdu deaktivovat partnera <strong>{' . $web . '}</strong>? Deaktivací dojde k okamžitému zastavení zobrazování tohoto partnera na webových stránkách.');

Vygenerovaný odkaz z deactivate! odkazuje do presenteru, ale já potřebuji aby odkazoval do té mé komponenty, ve které je i tento Grid.

Dále bych se chtěl zeptat jestli nějak lze u posledního řádku zobrazit přímo nějakou proměnnou tak jak se to dělá třeba u Link::PARAMS?

svobodai
Člen | 136
+
0
-

Jakým způsobem mohu z gridu vytáhnout aktuálně použitý select, případně informace ke stránkování.

Ještě jsem narazil na to, když změním filtr a tím se mi změní počet stránek tak zůstává paginator nastaven na tu stránku kde jsem byl, i když už na ní nemusí být dat. Jde o to, že pokud změním řazení nebo filtr měl by se paginator nastavit na první stránku.

mesour
Nette Blogger | 236
+
0
-

tom napsal(a):

Bylo by prosím možné, aby v případě, že datasource nenabízí žádná data, tak vypsat nějaký uživatelský alert? Jestli jsem to někde přehlédl tak se omlouvám.

Díky

Jestli to správně chápu, tak jde o to, pokud nejsou žádné data tak udělat nějakou řádku s colspan=„počet sloupců“, ve které by byl napsaný nějaký text například „Žádná data!“. Text by samozřejmě šel nastavit, pokud by se nanastavil, tak by byl nějaký defaultní nebo by se řádek nezobrazil.

Tohle by stačilo?

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Potřeboval bych do hlavičky některých sloupců přidat span s tooltipem. Jak by se to dalo udělat, nebo jak by se to dalo vyřešit jinak.

Dalo by se to vyřešit takhle:
Každý sloupec má metodu getHeaderContent, která vrací Nette\Utils\Html. Teoreticky by se dal sloupec podědit, následně by se přepsala metoda getHeaderContent, například takto:

public function getHeaderContent() {
	$parent = parent::getHeaderContent();
	$parent->add("my added content jako string nebo \Nette\Utils\Html");
	return $parent;
}

Nevím a teď nemám čas zkoumat, co všechno umí Nette\Utils\Html, občas bývá obsah hlavičky složitější. Nicméně, takhle by se to teoreticky řešit dalo, když ne, tak by se na to mohlo něco vymyslet (asi by to bylo do budoucna lepší).

V každém případě to vypadá, že se teď minimálně týden-dva nedostanu k nějakým větším změnám, mám hodně jiné práce a také připravuji přednášku.

tom
Člen | 171
+
0
-

mesour napsal(a):

tom napsal(a):

Bylo by prosím možné, aby v případě, že datasource nenabízí žádná data, tak vypsat nějaký uživatelský alert? Jestli jsem to někde přehlédl tak se omlouvám.

Díky

Jestli to správně chápu, tak jde o to, pokud nejsou žádné data tak udělat nějakou řádku s colspan=„počet sloupců“, ve které by byl napsaný nějaký text například „Žádná data!“. Text by samozřejmě šel nastavit, pokud by se nanastavil, tak by byl nějaký defaultní nebo by se řádek nezobrazil.

Tohle by stačilo?

Nene, myslím to tak, že v případě kdy nejsou žádné data = řádky … třeba zvoleným podmínkám nevyhovuje nic (např. na dnešní den není žádná objednávka). Tak aby se v tom gridu zobrazil nějaký uživatelsky definovaný alert. Nyní je tam záhlaví a pak stránkovač. Mezitím není nic.

Tom

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Jakým způsobem mohu z gridu vytáhnout aktuálně použitý select, případně informace ke stránkování.

Ještě jsem narazil na to, když změním filtr a tím se mi změní počet stránek tak zůstává paginator nastaven na tu stránku kde jsem byl, i když už na ní nemusí být dat. Jde o to, že pokud změním řazení nebo filtr měl by se paginator nastavit na první stránku.

Zatím vytáhnout nelze, přidám.

Tohle je bug, zapsal jsem si to na seznam a při dalším update to opravím.

mesour
Nette Blogger | 236
+
0
-

tom napsal(a):

mesour napsal(a):

tom napsal(a):

Bylo by prosím možné, aby v případě, že datasource nenabízí žádná data, tak vypsat nějaký uživatelský alert? Jestli jsem to někde přehlédl tak se omlouvám.

Díky

Jestli to správně chápu, tak jde o to, pokud nejsou žádné data tak udělat nějakou řádku s colspan=„počet sloupců“, ve které by byl napsaný nějaký text například „Žádná data!“. Text by samozřejmě šel nastavit, pokud by se nanastavil, tak by byl nějaký defaultní nebo by se řádek nezobrazil.

Tohle by stačilo?

Nene, myslím to tak, že v případě kdy nejsou žádné data = řádky … třeba zvoleným podmínkám nevyhovuje nic (např. na dnešní den není žádná objednávka). Tak aby se v tom gridu zobrazil nějaký uživatelsky definovaný alert. Nyní je tam záhlaví a pak stránkovač. Mezitím není nic.

Tom

Aha jasně chápu, to znamená, že to co jsem psal by tam také mohlo být + druhá hláška, když původní data budou, ale nebude nic po filtrování.

To by mělo být OK ne? :)

mesour
Nette Blogger | 236
+
0
-

vymak napsal(a):

Ahoj, díky za super grid ale potřeboval bych trochu poradit.

Mám tento grid v samostané komponentě, tedy ne přímo v presenteru. Můj problém je že netusím jak zavolat handle metodu přímo v komponentě.

Vygenerovaný odkaz z deactivate! odkazuje do presenteru, ale já potřebuji aby odkazoval do té mé komponenty, ve které je i tento Grid.

Dále bych se chtěl zeptat jestli nějak lze u posledního řádku zobrazit přímo nějakou proměnnou tak jak se to dělá třeba u Link::PARAMS?

  1. Tuhle možnost jsem neřešil, udělám něco čím to půjde nastavit
  2. Tohle taky neumí. Nějaké nastavení by určitě ale šlo udělat :-)
vymak
Člen | 92
+
0
-

mesour napsal(a):

vymak napsal(a):

Ahoj, díky za super grid ale potřeboval bych trochu poradit.

Mám tento grid v samostané komponentě, tedy ne přímo v presenteru. Můj problém je že netusím jak zavolat handle metodu přímo v komponentě.

Vygenerovaný odkaz z deactivate! odkazuje do presenteru, ale já potřebuji aby odkazoval do té mé komponenty, ve které je i tento Grid.

Dále bych se chtěl zeptat jestli nějak lze u posledního řádku zobrazit přímo nějakou proměnnou tak jak se to dělá třeba u Link::PARAMS?

  1. Tuhle možnost jsem neřešil, udělám něco čím to půjde nastavit
  2. Tohle taky neumí. Nějaké nastavení by určitě ale šlo udělat :-)

Díky za info, a nenepadá Tě zatím jak ten první bod zprovoznit? Klidně i nějakým hackem :D Nefunguje mi teď totiž půlka administrace :D

Mě napadlo jen takové řešení, ale tam zase narážím s problémem číslo 2 a to že nevím jak tam dostat to $id

	$button = new Components\Button;
	$button->addAttribute('href', $this->link('deactivate!', $id));

Editoval vymak (6. 11. 2014 17:24)

mesour
Nette Blogger | 236
+
0
-

vymak napsal(a):

mesour napsal(a):

vymak napsal(a):

Ahoj, díky za super grid ale potřeboval bych trochu poradit.

Mám tento grid v samostané komponentě, tedy ne přímo v presenteru. Můj problém je že netusím jak zavolat handle metodu přímo v komponentě.

Vygenerovaný odkaz z deactivate! odkazuje do presenteru, ale já potřebuji aby odkazoval do té mé komponenty, ve které je i tento Grid.

Dále bych se chtěl zeptat jestli nějak lze u posledního řádku zobrazit přímo nějakou proměnnou tak jak se to dělá třeba u Link::PARAMS?

  1. Tuhle možnost jsem neřešil, udělám něco čím to půjde nastavit
  2. Tohle taky neumí. Nějaké nastavení by určitě ale šlo udělat :-)

Díky za info, a nenepadá Tě zatím jak ten první bod zprovoznit? Klidně i nějakým hackem :D Nefunguje mi teď totiž půlka administrace :D

Mě napadlo jen takové řešení, ale tam zase narážím s problémem číslo 2 a to že nevím jak tam dostat to $id

	$button = new Components\Button;
	$button->addAttribute('href', $this->link('deactivate!', $id));

Zítra to zapracuji a dám vědět, až to bude. Napadá mě dost řešení, ale jsou to změny na více místech.

Jedno řešení mě napadá, ale to nezahrnuje subcomponenty, takže se nad tím zítra zamyslím a něco připravím.

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

Potřeboval bych do hlavičky některých sloupců přidat span s tooltipem. Jak by se to dalo udělat, nebo jak by se to dalo vyřešit jinak.

Dalo by se to vyřešit takhle:
Každý sloupec má metodu getHeaderContent, která vrací Nette\Utils\Html. Teoreticky by se dal sloupec podědit, následně by se přepsala metoda getHeaderContent, například takto:

public function getHeaderContent() {
	$parent = parent::getHeaderContent();
	$parent->add("my added content jako string nebo \Nette\Utils\Html");
	return $parent;
}

Nevím a teď nemám čas zkoumat, co všechno umí Nette\Utils\Html, občas bývá obsah hlavičky složitější. Nicméně, takhle by se to teoreticky řešit dalo, když ne, tak by se na to mohlo něco vymyslet (asi by to bylo do budoucna lepší).

V každém případě to vypadá, že se teď minimálně týden-dva nedostanu k nějakým větším změnám, mám hodně jiné práce a také připravuji přednášku.

To je hezké, ale problém je v tom, že tu úpravu nepotřebuji na všechny sloupce, ale jen na některé. Defacto, ta úprava by se měla být jako další parametr u sloupce a je jedno jestli se to bude předávat jako text nebo HTML elelment.

svobodai
Člen | 136
+
0
-

Mám problém s externím filtrem, když v něm provedu změny, které mají provést změny v dalších polích v tomto filtru nedojde k jeho překreslení. mám tam $this->redrawControl();

Chtěl bych jen překreslit filtr, ale dojde k překreslení i gridu, což je pro mně problém, protože načtení samotného gridu je dlouhá záležitost.

Jde nějak vynutit jen překreslení filtrovacího formuláře.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Mám problém s externím filtrem, když v něm provedu změny, které mají provést změny v dalších polích v tomto filtru nedojde k jeho překreslení. mám tam $this->redrawControl();

Chtěl bych jen překreslit filtr, ale dojde k překreslení i gridu, což je pro mně problém, protože načtení samotného gridu je dlouhá záležitost.

Jde nějak vynutit jen překreslení filtrovacího formuláře.

Ahoj, je tam event onFilter, v tomhle callbacku máš asi $this->redrawControl(). Mělo by fungovat $this[‚gridComponentName‘][‚filter‘]->redrawControl(‚filter‘). Nemám to ale otestované.

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Potřeboval bych do hlavičky některých sloupců přidat span s tooltipem. Jak by se to dalo udělat, nebo jak by se to dalo vyřešit jinak.

Dalo by se to vyřešit takhle:
Každý sloupec má metodu getHeaderContent, která vrací Nette\Utils\Html. Teoreticky by se dal sloupec podědit, následně by se přepsala metoda getHeaderContent, například takto:

public function getHeaderContent() {
	$parent = parent::getHeaderContent();
	$parent->add("my added content jako string nebo \Nette\Utils\Html");
	return $parent;
}

Nevím a teď nemám čas zkoumat, co všechno umí Nette\Utils\Html, občas bývá obsah hlavičky složitější. Nicméně, takhle by se to teoreticky řešit dalo, když ne, tak by se na to mohlo něco vymyslet (asi by to bylo do budoucna lepší).

V každém případě to vypadá, že se teď minimálně týden-dva nedostanu k nějakým větším změnám, mám hodně jiné práce a také připravuji přednášku.

To je hezké, ale problém je v tom, že tu úpravu nepotřebuji na všechny sloupce, ale jen na některé. Defacto, ta úprava by se měla být jako další parametr u sloupce a je jedno jestli se to bude předávat jako text nebo HTML elelment.

Dobře, nějak to tam zapracuji, ale kdy se k tomu dostanu to teď nemůžu slíbit.

mesour
Nette Blogger | 236
+
0
-

mesour napsal(a):

vymak napsal(a):

mesour napsal(a):

vymak napsal(a):

Ahoj, díky za super grid ale potřeboval bych trochu poradit.

Mám tento grid v samostané komponentě, tedy ne přímo v presenteru. Můj problém je že netusím jak zavolat handle metodu přímo v komponentě.

Vygenerovaný odkaz z deactivate! odkazuje do presenteru, ale já potřebuji aby odkazoval do té mé komponenty, ve které je i tento Grid.

Dále bych se chtěl zeptat jestli nějak lze u posledního řádku zobrazit přímo nějakou proměnnou tak jak se to dělá třeba u Link::PARAMS?

  1. Tuhle možnost jsem neřešil, udělám něco čím to půjde nastavit
  2. Tohle taky neumí. Nějaké nastavení by určitě ale šlo udělat :-)

Díky za info, a nenepadá Tě zatím jak ten první bod zprovoznit? Klidně i nějakým hackem :D Nefunguje mi teď totiž půlka administrace :D

Mě napadlo jen takové řešení, ale tam zase narážím s problémem číslo 2 a to že nevím jak tam dostat to $id

	$button = new Components\Button;
	$button->addAttribute('href', $this->link('deactivate!', $id));

Zítra to zapracuji a dám vědět, až to bude. Napadá mě dost řešení, ale jsou to změny na více místech.

Jedno řešení mě napadá, ale to nezahrnuje subcomponenty, takže se nad tím zítra zamyslím a něco připravím.

Ahoj, omlouvám se za zpoždění, mám toho opravdu hodně. Zapracoval jsem zatím tu možnost odkazovat na componentu. Classa Components\Link má nyní constantu COMPONENT, které se dá poslat string nebo array.

V případě hodnoty:
„test“ volá metodu link na $this->presenter[‚test‘]
array(„test“, „subtest“) volá metodu link na $this->presenter[‚test‘][‚subtest‘]

To je u buttonu. U dropdownu, který má metodu addLink přibyl pátý parametr, který je default NULL a také se mu dá poslat string nebo array.

Změny jsou v dev-master.

Do další verze se nad tímhle ještě zamyslím a třeba se to ještě zjednoduší ;-)

vymak
Člen | 92
+
0
-

mesour napsal(a):

mesour napsal(a):

vymak napsal(a):

mesour napsal(a):

vymak napsal(a):

Ahoj, díky za super grid ale potřeboval bych trochu poradit.

Mám tento grid v samostané komponentě, tedy ne přímo v presenteru. Můj problém je že netusím jak zavolat handle metodu přímo v komponentě.

Vygenerovaný odkaz z deactivate! odkazuje do presenteru, ale já potřebuji aby odkazoval do té mé komponenty, ve které je i tento Grid.

Dále bych se chtěl zeptat jestli nějak lze u posledního řádku zobrazit přímo nějakou proměnnou tak jak se to dělá třeba u Link::PARAMS?

  1. Tuhle možnost jsem neřešil, udělám něco čím to půjde nastavit
  2. Tohle taky neumí. Nějaké nastavení by určitě ale šlo udělat :-)

Díky za info, a nenepadá Tě zatím jak ten první bod zprovoznit? Klidně i nějakým hackem :D Nefunguje mi teď totiž půlka administrace :D

Mě napadlo jen takové řešení, ale tam zase narážím s problémem číslo 2 a to že nevím jak tam dostat to $id

	$button = new Components\Button;
	$button->addAttribute('href', $this->link('deactivate!', $id));

Zítra to zapracuji a dám vědět, až to bude. Napadá mě dost řešení, ale jsou to změny na více místech.

Jedno řešení mě napadá, ale to nezahrnuje subcomponenty, takže se nad tím zítra zamyslím a něco připravím.

Ahoj, omlouvám se za zpoždění, mám toho opravdu hodně. Zapracoval jsem zatím tu možnost odkazovat na componentu. Classa Components\Link má nyní constantu COMPONENT, které se dá poslat string nebo array.

V případě hodnoty:
„test“ volá metodu link na $this->presenter[‚test‘]
array(„test“, „subtest“) volá metodu link na $this->presenter[‚test‘][‚subtest‘]

To je u buttonu. U dropdownu, který má metodu addLink přibyl pátý parametr, který je default NULL a také se mu dá poslat string nebo array.

Změny jsou v dev-master.

Do další verze se nad tímhle ještě zamyslím a třeba se to ještě zjednoduší ;-)

Díky moc :) Zkoušel jsem a funguje suprově :)

mesour
Nette Blogger | 236
+
0
-

Zítra bych se měl dostat ke gridu, takže zapracuji vaše požadavky, alespoň některé + fixnu některé bugy o kterých vím. Ale nic neslibuji, možná to zítra nestihnu.

Info: Pokud potřebujete nějakou úpravu nebo novou funkcionalitu urgentně, tak je možné poslat na GitHubu pull request, já se na to mrknu, případně poupravím, když bude potřeba a mergnu ;-) V každém případě doporučuji to nejdříve probrat tady než se do něčeho pustíte.

Jinak už mám skoro dokončenou verzi 2.0. Ještě budu testovat a doufám, že půjde co nejdřív do světa ;-) Nebude zpětně kompatibilní, budou odstraněny deprecated ze současné verze, celé se to zanoří do namespace \Mesour\DataGrid, pár dalších novinek a hlavně se změní inicializace sloupců. Konzultoval jsem to s Jazby a nakonec jsem se rozhodl pro způsob, kterým to řeší Nette formy, takže příklad sloupce text:

$grid->addText('name')
	->setHeader('Name');

Také jsem přejmenoval setName na setHeader na všech sloupcích. setName toho moc neříkalo.

Ze současné verze v dev-master udělám 1.4.5. Ta už se nebude dál vyvíjet, jen se na ní budou fixovat bugy, když se najdou a případně se dodělá nějaká menší funkcionalita, pokud bude někdo potřebovat.

Až bude hotová verze 2.0, tak na grid.mesour.com bude dokumentace k verzi 2.0 a ta současná se přesune na jinou subdoménu. Nemám v plánu nějak měnit vzhled dokumentace, ani styl, jakým je psaná, to si myslím, že je vyhovující. Co tam ale bude nové bude lepší syntax highlight a u ukázek budou čísla řádků s možností sdílet odkaz na konkrétní řádek nebo skupinu řádků, tak jak to funguje třeba na GitHubu.

Trochu odjinud
Udělal jQuery plugin na zobrazení řádků k elementu <pre>, protože ty co jsem našel mi prostě nevyhovovaly ať už použitím, možnostmi nebo jiným. Tady je odkaz na ten plugin, kdyby se to někomu hodilo: https://github.com/…iceCodeLines. Případné dotazy k pluginu do mailu přes formulář na mesour.com nebo rovnou issues na GitHubu ;-)

Editoval mesour (22. 11. 2014 19:10)

tom
Člen | 171
+
0
-

mesour napsal(a):

tom napsal(a):

Můžu poprosit o ukázku kódu použití Permissions pro Button? Díky

Ahoj, normálně jako pro všechno ostatní, stačí nastavit callback, který bude vracet FALSE nebo Nette URL, která přijde v parametru. Vnitřní logiku si samozřejmě změň: http://grid.mesour.com/setting/#…

a jak ten callback na buttonu nastavis? diky

mesour
Nette Blogger | 236
+
+1
-

tom napsal(a):

mesour napsal(a):

tom napsal(a):

Můžu poprosit o ukázku kódu použití Permissions pro Button? Díky

Ahoj, normálně jako pro všechno ostatní, stačí nastavit callback, který bude vracet FALSE nebo Nette URL, která přijde v parametru. Vnitřní logiku si samozřejmě změň: http://grid.mesour.com/setting/#…

a jak ten callback na buttonu nastavis? diky

Dejme tomu, že máš:

$button = new Button($this, array(
    Button::TYPE => 'btn-danger',
    Button::ICON => 'glyphicon-trash',
    Button::CONFIRM => 'Realy want to delete user?',
    Button::TITLE => 'Delete',
    Button::ATTRIBUTES => array(
    'href' => new Link(array(
        Link::HREF => 'deleteUser!',
        Link::PARAMS => array(
            'id' => 'user_id'
        )
        ))
    ),
));

Tak by jsi nastavil callback:

Link::$checkPermissionCallback = function($link) {
	$allowed_pages_for_current_user = array(
		'deleteUser!', 'DataGrid:editUser'
	);
    if(!in_array($link)) {
        return FALSE;
    }
    return $link;
};

Samozřejmě půjde i třeba v presenteru, dejme tomu ve startupu:

Link::$checkPermissionCallback = array($this, 'checkPermission');

Pak by vnitřek metody checkPermission mohl vypadat následovně:

public function checkPermission(){
	$allowed_pages_for_current_user = $this->user_model->getPermissions($this->user->id);
	if(!in_array($link)) {
        return FALSE;
    }
    return $link;
}

Nenastavuješ to zvlášť pro button. Nastavíš to globálně a ono se to použije pro všechny buttony a dropdowny v gridu i mimo grid.

Editoval mesour (4. 12. 2014 13:37)

svobodai
Člen | 136
+
0
-

Mám v gridu 8 sloupců, ale potřebuju filtrovat jen podle 4. Dá se nějak pro ten standardní filtr podle nastavit kterých se má filtrovat.

Dá se ve sloupci nastavit aby mi zobralzoval jiná data. Myslím tím, že v selectu mám id na jinou tabulku a abych ji nemusel přijoinovat v selectu, tak jestli se do sloupce dá nastavit zobrazení s tím, že tam bude dotaz do DB na dohledání popisku podle toho id?

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

Mám v gridu 8 sloupců, ale potřebuju filtrovat jen podle 4. Dá se nějak pro ten standardní filtr podle nastavit kterých se má filtrovat.

Dá se ve sloupci nastavit aby mi zobralzoval jiná data. Myslím tím, že v selectu mám id na jinou tabulku a abych ji nemusel přijoinovat v selectu, tak jestli se do sloupce dá nastavit zobrazení s tím, že tam bude dotaz do DB na dohledání popisku podle toho id?

Ahoj,

na sloupcích, na kterých nechceš filtrovat zavolej ->setOrdering(FALSE) nebo Column\Foo::ORDREING ⇒ FALSE.

Nic automatického tam není, bude asi potřeba použít callback a v něm si doplňující data z DB dotáhnout a vypsat sám.

svobodai
Člen | 136
+
0
-

mesour napsal(a):

svobodai napsal(a):

Mám v gridu 8 sloupců, ale potřebuju filtrovat jen podle 4. Dá se nějak pro ten standardní filtr podle nastavit kterých se má filtrovat.

Dá se ve sloupci nastavit aby mi zobralzoval jiná data. Myslím tím, že v selectu mám id na jinou tabulku a abych ji nemusel přijoinovat v selectu, tak jestli se do sloupce dá nastavit zobrazení s tím, že tam bude dotaz do DB na dohledání popisku podle toho id?

Ahoj,

na sloupcích, na kterých nechceš filtrovat zavolej ->setOrdering(FALSE) nebo Column\Foo::ORDREING ⇒ FALSE.

Nic automatického tam není, bude asi potřeba použít callback a v něm si doplňující data z DB dotáhnout a vypsat sám.

No to je hezké, pak tam ten filtr nemám, ale zase podle toho sloupce nemohu řadit :-(

mesour
Nette Blogger | 236
+
0
-

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Mám v gridu 8 sloupců, ale potřebuju filtrovat jen podle 4. Dá se nějak pro ten standardní filtr podle nastavit kterých se má filtrovat.

Dá se ve sloupci nastavit aby mi zobralzoval jiná data. Myslím tím, že v selectu mám id na jinou tabulku a abych ji nemusel přijoinovat v selectu, tak jestli se do sloupce dá nastavit zobrazení s tím, že tam bude dotaz do DB na dohledání popisku podle toho id?

Ahoj,

na sloupcích, na kterých nechceš filtrovat zavolej ->setOrdering(FALSE) nebo Column\Foo::ORDREING ⇒ FALSE.

Nic automatického tam není, bude asi potřeba použít callback a v něm si doplňující data z DB dotáhnout a vypsat sám.

No to je hezké, pak tam ten filtr nemám, ale zase podle toho sloupce nemohu řadit :-(

Aha, tak to je bug teď si uvědomuji, že setOrdering(FALSE) má jen vypnout řazení a ne filtr. Takže tohle opravím a přidám metodu setFiltering(), která bude na všech sloupcích, podle kterých je možné filtrovat.

mesour
Nette Blogger | 236
+
0
-

mesour napsal(a):

svobodai napsal(a):

mesour napsal(a):

svobodai napsal(a):

Mám v gridu 8 sloupců, ale potřebuju filtrovat jen podle 4. Dá se nějak pro ten standardní filtr podle nastavit kterých se má filtrovat.

Dá se ve sloupci nastavit aby mi zobralzoval jiná data. Myslím tím, že v selectu mám id na jinou tabulku a abych ji nemusel přijoinovat v selectu, tak jestli se do sloupce dá nastavit zobrazení s tím, že tam bude dotaz do DB na dohledání popisku podle toho id?

Ahoj,

na sloupcích, na kterých nechceš filtrovat zavolej ->setOrdering(FALSE) nebo Column\Foo::ORDREING ⇒ FALSE.

Nic automatického tam není, bude asi potřeba použít callback a v něm si doplňující data z DB dotáhnout a vypsat sám.

No to je hezké, pak tam ten filtr nemám, ale zase podle toho sloupce nemohu řadit :-(

Aha, tak to je bug teď si uvědomuji, že setOrdering(FALSE) má jen vypnout řazení a ne filtr. Takže tohle opravím a přidám metodu setFiltering(), která bude na všech sloupcích, podle kterých je možné filtrovat.

Ahoj, nakonec jsem zjistil, že nešlo o bug. SetOrdering vypne správně pouze řazení :)

mesour
Nette Blogger | 236
+
0
-

Udělal jsem update, šlo pouze o fix některých bugů. Ještě mám nějaké na seznamu a pak tam mám i pár nových feature, o které jste si zde psali. Mám v plánu to vše zapracovat, až to bude, tak z dev-master vytvořím verzi 1.4.5, která se už nebude dále vyvíjet (pouze úpravy případných bugů). A pak do dev-master umístím verzi 2.0+ ;-)

Co bylo opraveno:

  • Na sloupce, podle kterých lze filtrovat přidat metodu setFiltering, aby šlo filtr případně vypnout
  • Fix default filter if value is NULL (JS error)
  • Při použití filtru nebo řazení nastavit pager na první stránku

Změny jsou v dev-master

Editoval mesour (12. 12. 2014 22:23)

mesour
Nette Blogger | 236
+
0
-

Udělal jsem další update:

  1. Z required byla odstraněna nutnost mít v JS namapovaný click event na .ajax:not(form)
  2. Přibyly metody setAttributes a addAttribute na všech sloupcích. Je tak možné nastavit atributy pro <td>. Funguje tam také překlad hodnot např: „{user_id}“
  3. Pokud nejsou žádné data, tak se zobrazí hláška „Nothing to display.“. Hlášku je možné změnit pomocí $grid->setEmptyText(‚Your message‘); Překládá se pomocí uživatelského translatoru.
  4. Byl fixnut bug selectu v custom filtru. Nyní zobrazuje hodnotu po filtrování správně.
  5. Bylo trochu pozměněno UI u defaultních filtrů. Filtruje se rovnou při kliku na checkbox a není potřeba zvlášť klikat na „Apply filter“.

Změny jsou v „dev-master“.

mesour
Nette Blogger | 236
+
0
-

@svobodai : Přidal jsem nové metody Grid->getPaginator() a Grid->getCurrentDataSource(). Obě tyto metody v sobě volají before render. Takže je ideální je volat až po úplné inicializaci gridu.

  • getPaginator vrací \Nette\Utils\Paginator s aktuálním nastavením nebo NULL, pokud není povolený pager
  • getCurrentDataSource vrací aktuální DataSource, které mají nové metody: getTableSelection, getDibiDataSource.

Editoval mesour (14. 12. 2014 22:02)

mesour
Nette Blogger | 236
+
0
-

Právě mi do mailu přišel zajímavý dotaz. Rozhodl jsem se to napsat sem, kdyby měl někdo ostatní stejný problém, tak aby to bylo dohledatelné.

Otázka:
Jak správně v Mesour Nette DataGrid řešit následující scénář:

Mám tabulku s data.
V ní jsou např. ve dvou sloupcích propoje do dalších tabulek skrze ID.
Tab1: 1,Octavia, 10, 2
Tab2: 10, Škoda
Tab3: 2, nafta

Grid použiji pro Tab1 tak aby mi zobrazil 1,Octavia,Škoda,nafta

Nyní bych potřeboval použít super věc a to inline editaci.

Prosím existuje někde demo takovéto situace?
Nevím jak správně pro toto připravit data, ap.

Tak abych v té Tab1 editovat id a né přímo texty.

Odpověď:
jestli to správně chápu, tak potřebuješ třeba pro auto Octavia s ID 1 změnit typ paliva, tím pádem by asi bylo nejideálnější tam mít select se všemi typy paliv a po výběru jiného paliva by se to v DB změnilo že?

Tohle jsem už řešil a ne jen s 1:1 relací, ale dokonce s 1:n relací. Bohužel gridu zatím nelze nastavit relační tabulky (přemýšlel jsem nad tím, ale ještě jsem se nedostal k realizaci). Přemýšlel jsem zatím jen nad zobrazením, ale umožnit pro to editaci je zajímavý nápad :-)

Realizace:
Dejme tomu, že grid bude zobrazen v nějakém presenteru v akci default:

actionDefault jsem si vytvořil subcomponenty s názvy ‚fuelX‘, kde „X“ bylo vždy ID řádku. V tvém případě ID auta. Source jsem si uložil do $this->source, abych měl pouze jednu instanci.

public function actionDefault() {
	$this->source = new DibiDataSource($this->model->car->getAllCarsSource());
	foreach ($this->source->fetchAll() as $car) {
		$this->addComponent(new FuelControl($car), 'fuel' . $car['car_id']);
	}
}

Componenta FuelControl už může mít vnitřek jakýkoliv. Do constructoru jí přijdou informace o autě, takže podle toho se pak chová (předvybere palivo pro toto auto, může mít v sobě handlery a formuláře, může mít vlastní templatu a metodu render, jako jakákoliv jiná componenta).

Pro relaci 1:n by componenta mohla zobrazovat v buňce <ul> s prvky a každé <li> může mít button třeba pro smazání nebo změnu statusu. A select pro přidávání nových položek. Select by pak kontroloval, zda už jsou přidány všechny položky, pokud by byly, tak by zobrazil info, že žádná další už přidat nelze. Také by kontroloval, co už bylo přidáno a ty hodnoty by se pak ve selectu nezobrazily, aby nevznikaly duplicity, pokud to není žádané.

Do gridu jsem pak přidal sloupec Column\Text a tomu jsem přes callback nastavil tuhle componentu vždy s příslušným ID řádku.

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

$grid->column(new Column\Text(array(
	Column\Text::ID => 'car_id',
	Column\Text::TEXT => 'Fuel type',
	Column\Text::CALLBACK => function ($data, $that) {
		return $that['fuel' . $data['car_id']->render();
	},
	Column\Text::CALLBACK_ARGS => array($this),
	Column\Text::ORDERING => FALSE
)));

EDIT:
Pro info odeslání formuláře AJAXem po onChange na selectu se dá řešit například takto:

$select->addSelect('fuel_id', NULL)
	->setPrompt('Select fuel')
	->setItems($not_used_fuels)
	->getControlPrototype()->onchange("$(this).closest('form').ajaxFormSubmit(); return false;");

jQuery plugin ajaxFormSubmit je od Hozny Marka. Jen jsem ho přejmenoval a ještě jsem ho trochu pozměnil, link je zde: http://git.mesour.com/….ajaxform.js. Je ale z roku 2009, nevím zda ho od té doby neupdatoval :-)

Editoval mesour (9. 1. 2015 11:36)

tom
Člen | 171
+
0
-

Ahoj,
snažím se zprovoznit Row selection (viz http://grid.mesour.com/…c/selection/). Zajímalo by mě, jak potom v příslušném handleru poznám, které ty sloupce byly vybrány?

Funguje to někomu?

Navíc mi generuje adresy typu /a?do=activeSelected … písmeno „a“ je první písmeno handleru … je to OK?

Poprosil bych o ukázku jak to má fungovat.

Díky

Editoval tom (14. 1. 2015 9:07)

tom
Člen | 171
+
0
-

Když se dívám do ukázky na webu, tak tam jsou URL v odkazu v pořádku, např. /?do=activeSelected. Není mi jasné proč se mi tam dostává to první písmenko.

tom napsal(a):

Ahoj,
snažím se zprovoznit Row selection (viz http://grid.mesour.com/…c/selection/). Zajímalo by mě, jak potom v příslušném handleru poznám, které ty sloupce byly vybrány?

Funguje to někomu?

Navíc mi generuje adresy typu /a?do=activeSelected … písmeno „a“ je první písmeno handleru … je to OK?

Poprosil bych o ukázku jak to má fungovat.

Díky

mesour
Nette Blogger | 236
+
0
-

tom napsal(a):

Když se dívám do ukázky na webu, tak tam jsou URL v odkazu v pořádku, např. /?do=activeSelected. Není mi jasné proč se mi tam dostává to první písmenko.

tom napsal(a):

Ahoj,
snažím se zprovoznit Row selection (viz http://grid.mesour.com/…c/selection/). Zajímalo by mě, jak potom v příslušném handleru poznám, které ty sloupce byly vybrány?

Funguje to někomu?

Navíc mi generuje adresy typu /a?do=activeSelected … písmeno „a“ je první písmeno handleru … je to OK?

Poprosil bych o ukázku jak to má fungovat.

Díky

Ahoj, to je hodně divné, to písmeno „a“ by tam být nemělo a vůbec netuším, proč by se tam mělo objevovat. Jak vidíš na demu, tak tam žádné písmeno není. Je tam použitá poslední verze z dev-master.

Vybrané řádky získáš z $this->getHttpRequest()->getPost(‚data‘); Do budoucna budu tohle chtít změnit, aby se nastavovaly pouze callbacky, do kterých budou chodit v parametrech data aby to bylo jasnější.

tom
Člen | 171
+
0
-

tak pokud to prepisu na

<?php
            //here set row selection
            $grid->enableRowSelection($table_id, array(
                'Active' => array( // simple way
                    'href' => 'activeSelected!'
                ),
                'Unactive' => array( // simple way
                    'href' => 'unactiveSelected!'
                ),
                'Delete' => array( // choice with javascript confirm
                    'href' => 'deleteSelected!',
                    'data-confirm' => 'Realy delete all selected users?'
                ),
            ));
?>

tak to funguje.

Muzu se zeptat, kdy se asi dostanes k tem callbackum, jestli s tim mym resenim mam pockat anebo to udelat zatim takto. Diky

mesour napsal(a):

tom napsal(a):

Když se dívám do ukázky na webu, tak tam jsou URL v odkazu v pořádku, např. /?do=activeSelected. Není mi jasné proč se mi tam dostává to první písmenko.

tom napsal(a):

Ahoj,
snažím se zprovoznit Row selection (viz http://grid.mesour.com/…c/selection/). Zajímalo by mě, jak potom v příslušném handleru poznám, které ty sloupce byly vybrány?

Funguje to někomu?

Navíc mi generuje adresy typu /a?do=activeSelected … písmeno „a“ je první písmeno handleru … je to OK?

Poprosil bych o ukázku jak to má fungovat.

Díky

Ahoj, to je hodně divné, to písmeno „a“ by tam být nemělo a vůbec netuším, proč by se tam mělo objevovat. Jak vidíš na demu, tak tam žádné písmeno není. Je tam použitá poslední verze z dev-master.

Vybrané řádky získáš z $this->getHttpRequest()->getPost(‚data‘); Do budoucna budu tohle chtít změnit, aby se nastavovaly pouze callbacky, do kterých budou chodit v parametrech data aby to bylo jasnější.

tom
Člen | 171
+
0
-

Jestli to chápu správně, tak výsledkem každého handleru navázaného na Row selection je ajaxový request.

Potřebuju pomocí handleru stáhnout soubor, je možné nastavit aby se nejednalo o ajaxový request ale klasický? Pokud ne, tak kde se dá modifikovat ajax (a jak) tady toho gridu aby pro tento případ vykonal ještě otevření stránky, která to stažení souboru udělá?

Díky moc