Grido – DataGrid pro Nette

Jiří Nápravník
Člen | 710
+
0
-

o5 napsal(a):
Jako opravdu nevím, jak by se to mělo vyřešit správně. Řešení přes novou šablonu se mi nezamlouvá, protože příjde někdo a řekne že používá http://semantic-ui.com/ a co bude pak, nová šablona? Budu udržovat x šablon? Chtělo by asi šablonu nějak rozumě rozdělit a rozseparovat. Nevím :/

no tak semantic-ui Grido nepoužívá ne? Což je torchu rozdíl, pokud jsi postavil Grido na TB, tak mi přijde logické upgradovat s novou verzí i podporu pro TB. Speciální šablona je prasečina, to je jasný, lepší by bylo to zdvojení class, že by proste byla class=„btn-mini btn-xs“ a kdo by si nahral jaký TB, tak takový by to používalo. Není to taky čisté a sám jsem proti tomu zbrojil, ale jako nouzovka proč ne. No anebo pak je tu varianta, oprostit se teda od bootstrapu úplně a udělat si prostě svůj design.

o5
Člen | 416
+
0
-

Release 0.9.3

Jak už si někdo možná na GitHubu všimnul, vydal jsem verzi 0.9.3. Protože jsem si na vlastní kůži ověřil výhody TDD oproti TAD, musel jsem toho dost přepsat a tedy tento release vlastně ani z pohledu uživatele nic nového nepřináší. Ale hlavní je, že je Grido kompletně pokryté testy! Některé metody byly uznačeny jako @deprecated a vyhazují E_USER_DEPRECATED. Přehled všech @deprecated věcí je k vidění zde.

Hodně lidem se nelíbilo skládání podmínek a následné parsování v non-dibi datasources pomocí metod formatFilterCondition() apod. Při psaní testů dokonce vyšlo najevo, že ne všechny datasources mají stejné funkce jako DibiFluent (např.: filtrování dle více sloupců, apod) a že vracejí stejné výsledky, takže jsem to musel přepsat a tím vzniknul i jeden BC BREAK, který tento release obsahuje. Jedná se o nastavování vlastních podmínek filtrů přes $filter->setCondition(). Přidal jsem tam mezivrstvu v podobě třídy Condition a možnost v definici gridu nastavit callbackem podmínku příslušným způsobem pro použitý datasource.

//původní
$grid->addFilterCheck('male', 'Only male')
    ->setCondition(Filter::CONDITION_CUSTOM, array(
         TRUE => '[gender] = "male"'
));

//původní avšak nově modifikovaný způsob (BC BREAK)
$grid->addFilterCheck('male', 'Only male')
    ->setCondition(array(
        TRUE => array('gender', '= ?', 'male')
 ));

//nová možnost
$grid->addFilterCheck('male', 'Only male')
    ->setWhere(function($value, \Nette\Database\Table\Selection $connection) {
		$value
			? $connection->where('column = ?' , 'male')
			: NULL;
});

Všechny možnosti použití lze vidět v testech:

Úplný přehled změn lze dohledat na GitHubu, výše uvedené je to nejhlavnější.

Next:

V další fázi bude následovat překlopení větve „dev“ do masteru. Tam dojde k odstranění výše uvedených @deprecated a vznikne release 1.0. Jeho součástí bude asi i odstranění závislosti na TB2 pokud to tedy s TB3 bude vypadat jako v současné chvíli.

Editoval o5 (6. 11. 2013 14:06)

o5
Člen | 416
+
0
-

Release 1.0.0

  • „Závislosti“ na TB2 v podobě několika málo css-tříd v šabloně jsem nakonec nechal. Zároveň jsem i aktualizoval live demo.

Editoval o5 (6. 11. 2013 14:21)

pepakriz
Člen | 246
+
0
-

Díky za tvojí práci!

Jiří Nápravník
Člen | 710
+
0
-

Super práce, díky a díky i za podporu TB3 ;-)

rumcais1
Člen | 80
+
0
-

Přijde mi, že nějak divně funguje typeahead v ie s diakritikou? Funguje vám to dobře?

o5
Člen | 416
+
0
-

rumcais1 napsal(a):

Přijde mi, že nějak divně funguje typeahead v ie s diakritikou? Funguje vám to dobře?

Co je divně a v jakém IE? :)

Použítý typeahead.js v demu Grida je lehce upravený officiální z Bootstrapu 2. Pokud se nepletu, Twitter ho v Bootstrapu 3 odebral a doporučil tento. Je v plánu z dema odebrat js pluginy z Bootstrapu 2, každopádně Grido není závislé na žádné js komponentě.

Editoval o5 (4. 11. 2013 21:03)

Jiří Nápravník
Člen | 710
+
0
-

Je možné nějak při napovídání ve filter textu vracet jinak naformátovaný výstup? Chci spojit dva sloupečky. Použil jsem to co bylo doporučeno zde , či-li v mém případě:

->setSuggestion(function($item) { return $item->getSurname() . ' ' . $item->getFirstName(); })

Ale to dostanu: Object of class Closure could not be converted to string' in …\vendor\o5\grido\Grido\DataSources\Doctrine.php:245

Jde to nějak?

Používám Doctrine.

o5
Člen | 416
+
0
-

@Jiří Nápravník je to bug. Oprava je trochu rozsáhlejší, nezbyde ti prozatím nic jiného než použít vlastní datasource metodu suggest().

rumcais1
Člen | 80
+
0
-

o5 napsal(a):

rumcais1 napsal(a):

Přijde mi, že nějak divně funguje typeahead v ie s diakritikou? Funguje vám to dobře?

Co je divně a v jakém IE? :)

Použítý typeahead.js v demu Grida je lehce upravený officiální z Bootstrapu 2. Pokud se nepletu, Twitter ho v Bootstrapu 3 odebral a doporučil tento. Je v plánu z dema odebrat js pluginy z Bootstrapu 2, každopádně Grido není závislé na žádné js komponentě.

Zkouším teď to tvoje demo v ie9. A pokud odešlu ajaxem nějaké písmeno s diakritikou ie ho nepřeloží http://grido.bugyik.cz/example/?…. A vrátí se mi 500.

Rypi
Člen | 38
+
0
-

Ahoj, skvělá práce. Zrovna začínám a přimlouval bych se za aktualizace dokumentace… spousta věcí už nefunguje (filtry, podmínky…)

o5
Člen | 416
+
0
-

Release 1.0.1

  • opravena chyba v Doctrine datasource (THX @Jiří Nápravník za nalezení a opravení!)
  • sjednocuje setSuggestion() + callback se všemi datasources (to co zde hlásil @Jiří Nápravník)
  • přidána kontrola povolení setSuggestion()
  • opravena chyba, kterou zde hlásil @rumcais1 (handleSuggest() se nyní provede pouze pokud $query není prázdný řetězec – to že v IE9 zadám třeba ‚ž‘ a v uvedené metodě dostanu $query jako prázdný string není věc Grida, ale pravděpodobně bug Nette (či IE?) – dodebugoval jsem se sem ale dál jsem na to neměl sílu)

@Rypi: o neaktuální dokumentaci samozřejmě vím, jen jsem se k tomu ještě nedostal

Editoval o5 (7. 11. 2013 0:58)

rumcais1
Člen | 80
+
0
-

Podle mně je problém je problém v url encodovani. IE to neencoduje.
(mozilla)http://grido.bugyik.cz/example/?grid-filters-firstname-query=%C3%BD&do=grid-filters-firstname-suggest
(ie)http://grido.bugyik.cz/example/?grid-filters-firstname-query=ý&do=grid-filters-firstname-suggest

vlna
Člen | 34
+
0
-

Zdravím, před časem jsem měl podobný, ale ne stejný dotaz, zkusím ještě toto.
Je možné řadit podle jiného, než zobrazeného sloupce? Tzn. řekněmě bych měl v selectu dva sloupce a mohl bych nastavit, že když je aktivní řazení podle A, tak reálně řadit podle B?
Dík za tipy.

o5
Člen | 416
+
0
-

@vlna: Uděláš to tak, že přidáš order datasource před $grid->setModel(…); Aktuální řazení zjistíš přes $grid->params[‚sort‘] a když uděláš unset($grid->params[‚sort‘][‚A‘]) tak Grido řadit nebude.

lunak83
Člen | 47
+
0
-

Lze prosím nějak výsledek setOperations() otevřít v novém okně? Např. zaškrtám si tisk do PDF a chci to PDF v novém okně? Díky.

o5
Člen | 416
+
0
-

@lunak83: Na tohle žádnej přepínač není a ani nebude :)

Operace jsou dělaný klasicky přes formulář a vedle toho selectu vlevo dole je css-kem skrytý submit button. Napadlo mě celkem rychlé řešení a to nastavit $grid[‚form‘]->elementPrototype->target = „_blank“; a pak si budeš muset pohrát s nette.ajax.js. Zkoušel jsem to u sebe na demu v ajax=off módu a funguje to.

lunak83
Člen | 47
+
0
-

o5: Díky moc, promyslím to.

Jiří Nápravník
Člen | 710
+
0
-

Jde nějak vypnout filter? Resp. očekával jsem, že když žádný nenastavím, tak se tam ta tabulka s nimi nebude ukazovat.

sasule
Člen | 18
+
0
-

Zdravím, mám dotaz stran filtrování a exportu.
Do Gridu přidávám sloupec:

<?php
$grid->addColumnNumber('mandatory',"Povinné")
                ->setSortable()
                ->setCustomRender(function($item) {
                    switch ($item->mandatory) {
                        case 0:
                            return "Ne";
                        case 1:
                            return "Ano";
                        default:
                            return "";
                    }
                })
		->setFilterSelect(array(
                    "" => "",
                    "0" => "Ne",
                    "1" => "Ano",
                ));

?>

Toto mi správně vygeneruje v gridu ve sloupci hodnoty „Ano“ a „Ne“, ale když pak řadím, tak v případě volby „Ano“ se správně vygeneruje #userParametersGrid-filter[mandatory]=1, avšak v případě volby „Ne“ se nevygenruje nic.

Provizorně jsem to obešel tak, že do setFilterSelect dám jiné hodnoty (třeba ‚y‘ a ‚n‘), které pak metodou setCondition převedu na 0 a 1. Jde o možný bug, nebo na to jdu špatně?

A druhá věc – zajímalo by mě, zda je možné Gridu „vnutit“ vlastní „plugin“ pro export? Stávající mi nevyhovuje – potřeboval bych export do xls(x) a navíc potřebuji využívat nastavení vlastních hodnot pro sloupce (Ano, Ne, apod.) a setCustomRender se neuplatňuje (což chápu vzhledem k tomu, že si tam můžu nacpat v podstatě cokoli :-)) .

Díky.

Editoval sasule (18. 11. 2013 14:56)

zimmi
Člen | 94
+
0
-

Lze do OperationsHandleru nějak předat víc než jeden parametr? Potřeboval bych tam kromě ID editovaného záznamu poslat ještě něco dalšího.

o5
Člen | 416
+
0
-

Jiří Nápravník napsal(a):

Jde nějak vypnout filter? Resp. očekával jsem, že když žádný nenastavím, tak se tam ta tabulka s nimi nebude ukazovat.

Nevím co přesně myslíš pod „tou tabulkou“. Nyní je to tak, že pokud není nastaven typ filter renderu, žádný filtr ani akce a některý ze sloupců má povolený řazení, vynutí se filter render outer a zobrazí se reset button (kvůli zrušení řazení, dříve byl odkaz na řazení 3-fázový, ale protože se sešlo více hlasů pro stávající 2-fázový, změnil jsem to). Každopádně se to dá vynutit nastavením na filter render inner.

sasule napsal(a):

Toto mi správně vygeneruje v gridu ve sloupci hodnoty „Ano“ a „Ne“, ale když pak řadím, tak v případě volby „Ano“ se správně vygeneruje #userParametersGrid-filter[mandatory]=1, avšak v případě volby „Ne“ se nevygenruje nic.

Divný, zkoušel jsem v demu změnit hodnotu female na „0“ a po změně filtru se to normálně přeneslo #grid-filter[gender]=0 .

sasule napsal(a):

zajímalo by mě, zda je možné Gridu „vnutit“ vlastní „plugin“ pro export?

Ano. Lze vytvořit vlastní komponentu na cokoli (column, filter, action, export …) nic se nemusí nikam registrovat, jen to musí být potomek Grido\Components\Component.php. V tvém případě bude asi nejlepší podědit Export.php a přepsat si metodu send().

class MyExport extends \Grido\Components\Export
{
    function send(\Nette\Http\IRequest $httpRequest, \Nette\Http\IResponse $httpResponse)
    {
        //...
    }
}

//a pak v createComponentGrid()...
new MyExport($grid, 'MyExport');

zimmi napsal(a):

Lze do OperationsHandleru nějak předat víc než jeden parametr?

To jinak než potomkem Operation.php a přepsáním handleOperations() asi neuděláš.

Editoval o5 (19. 11. 2013 15:57)

Jiří Nápravník
Člen | 710
+
0
-

o5 napsal(a):
Nevím co přesně myslíš pod „tou tabulkou“. Nyní je to tak, že pokud není nastaven typ filter renderu, žádný filtr ani akce a některý ze sloupců má povolený řazení, vynutí se filter render outer a zobrazí se reset button (kvůli zrušení řazení, dříve byl odkaz na řazení 3-fázový, ale protože se sešlo více hlasů pro stávající 2-fázový, změnil jsem to). Každopádně se to dá vynutit nastavením na filter render inner.

Díky za reakci. Tabulkou jsem měl na mysli, právě jen to vypsání Restovacího tlačítka „v outter tabulce“. Jinak já neměl nastavení ani filtr, akci, ani řazení a i tak se mi vypsal resetovací button, což v podstatě bylo zbytečné a možná bych spíše očekával, že by se nevykreslilo nic, v tomhle případě, protože pak to resetovací tlačítko ztrácí smysl. Každopádně díky za typ s renderem na inner, to v podstatě ten resetovací button také skryje v tomhle případě.

sasule
Člen | 18
+
0
-

o5 napsal(a):

sasule napsal(a):

Toto mi správně vygeneruje v gridu ve sloupci hodnoty „Ano“ a „Ne“, ale když pak řadím, tak v případě volby „Ano“ se správně vygeneruje #userParametersGrid-filter[mandatory]=1, avšak v případě volby „Ne“ se nevygenruje nic.

Divný, zkoušel jsem v demu změnit hodnotu female na „0“ a po změně filtru se to normálně přeneslo #grid-filter[gender]=0 .

Pardon, já zapomněl zmínit, že používám \Nette\Database a Nette ve verzi 2.1-dev. Tak jesli to třeba nebude souviset.

Za ten export díky, jdu prubnout :-)

zimmi
Člen | 94
+
0
-

@o5: Díky za reakci. Napadá mě ještě to id poslat do operations ve tvaru id_dalsi-hodnota a pak si to na tom podtržítku rozbít na dva řetězce.

Jiří Nápravník
Člen | 710
+
0
-

Je možné nastavit defaultní řazení na sloupec, který není v gridu. Zkráka standardně nemohu dát do $grid->setDefaultSort, sloupec oc nemám v gridu. A přitom bych potřeboval skoro u většiny tabulek řadit tak abych měl nejnovější (tedy ID DESC) nahoře. Uživatele nějaké moje interní id nezajímá, tak je blbost ho tam vypisovat.

Je nějaká taková možnost? Případně workaround? Samozřejmě mohu podstrčit datasource, který bude mít order by v sobě, ale tím se připravím o možnost přepnout si filtr na jiný, resp. pořád se bude řadit podle toho prvního id.

o5
Člen | 416
+
0
-

@Jiří Nápravník: v budoucnu by to přes setDefaultSort() mohlo fungovat, nyní funguje tohle:

if (!$grid->params['sort']) {
   $datasource->sort('id');
}

$grid->model = $datasource;
Jiří Nápravník
Člen | 710
+
0
-

Díky, problém tímhle prozatím vyřešen

o5
Člen | 416
+
0
-

Release 1.0.2

  • opravuje pár chybiček
  • přidána metoda setSuggestionCallback() umožňující vlastní zdroj pro našeptávač
  • vylepšení $grid->setDefaultSort() – to co zde hlásil @Jiří Nápravník :)

Komplet změn k nalezení zde.

Jiří Nápravník
Člen | 710
+
0
-

o5 napsal(a):

  • vylepšení $grid->setDefaultSort() – to co zde hlásil @Jiří Nápravník :)

ty jo, ty jsi rychlý:-) díky!

kraklin
Člen | 12
+
0
-

Ahoj,

začal jsem používat Grido, ale nějak mi nechce fungovat JavaScript. Konkrétně se nic neděje pokud chci potvrzení u tlačítka smazání ani při změně počtu řádků na stránku. Nějaký tip kam se podívat?

jQuery.js v2.0.3
grido.js z v1.0.2

Grido komponentu vytvářím takto:

$grid = new Grido\Grid($this, $name);
$grid->translator->lang = 'cs';
$grid->setModel($this->context->usersRepository->findAll());
$grid->addColumnText("name", "Jméno")->setSortable();
$grid->addColumnText("username", "Username")->setFilterText();
$grid->addColumnText("role", "Role")->setFilterSelect();
$grid->addActionHref("edit", "Upravit", "User:edit");
$grid->addActionHref("delete", "Smazat", "User:delete")
	->setIcon('trash')
        ->setConfirm(function($item) {
             return "Are you sure you want to delete {$item->username}?";
        });
Stig
Člen | 29
+
0
-

ahoj, muze me, prosim, nekdo poradit jak spravne pouzit metodu „setReplacement“ ?

čekal bych ze takto, to ale bohuzel nejde: (type je v db (int))

<?php
$grid->addColumn('type', 'Typ')
  	->setReplacement(array(0=>"nula",1=>"jedna", 2=>"a dva"));
?>

dik

luk007
Člen | 6
+
0
-

ahoj, potreboval bych poradit, s Nette zacinam, tak predem sorry za stupidni otazku.

Jaky je nejlepsi zpusob, kdyz chci v celem projektu mit tlacitka v Gridu jen ikony bez popisu a popis mit jako atribut title? Diky moc

o5
Člen | 416
+
0
-

@kraklin: z toho co píšeš nic špatného nevidím, zřejmě nebudeš mít naloadovanej javascript na stránce, konzole nic nepíše?

@Stig: takto by to mělo fungovat (respektive jsem to teď zkoušel a funguje)..Jaké verze a datasource používáš?

@luk007: třeba takto:

$grid->addActionHref('open', '')
    ->setIcon('new-window')
    ->setCustomRender(function($row, \Nette\Utils\Html $element) {
        $element->title('Otevřít v novém okně')
            ->addAttributes(array('target' => '_blank'));

        return $element;
});
luk007
Člen | 6
+
0
-

o5 napsal(a):

@kraklin: z toho co píšeš nic špatného nevidím, zřejmě nebudeš mít naloadovanej javascript na stránce, konzole nic nepíše?

@Stig: takto by to mělo fungovat (respektive jsem to teď zkoušel a funguje)..Jaké verze a datasource používáš?

@luk007: třeba takto:

$grid->addActionHref('open', '')
    ->setIcon('new-window')
    ->setCustomRender(function($row, \Nette\Utils\Html $element) {
        $element->title('Otevřít v novém okně')
            ->addAttributes(array('target' => '_blank'));

        return $element;
});

Díky!

Jiří Nápravník
Člen | 710
+
0
-

To s tím, replacementem mohu potvrdit, ani mě to nefunguje jak bych čekal. Převede se vše dobře, jen 0 se nepřevede… Stejně tak, když chci nahradit false a true na něco tak se převede jen false. Používám Doctrine

radekmat
Člen | 4
+
0
-

Zdravím, mám podobný problém jako @kraklin
U Grido mi funguje naprosto bez problémů stránkování ajaxem. Problém je ale u filtru.
Request se odesílá POSTem, nikoliv přes GET parametry a datagrid se ani neinvaliduje.

Nevíte někdo, prosím co s tím? Dnes jsem si stáhnul aktuální verzi – problém je však stále stejný.
Jen uvedu, že formulář má nastavenou method parametr na GET.

Díky za rady.

o5
Člen | 416
+
0
-

radekmat napsal(a):

Request se odesílá POSTem, nikoliv přes GET parametry a datagrid se ani neinvaliduje.

A jak si prosím tě zjistil, že se posíla POSTem? Že se nic nepřidalo za hash (#) nebo si se koukal do Developer tools → Network → XHR a tam si opravdu viděl POST??

A dělá ti to i grido-sandbox? Potřeboval bych více informací, abych to dokázal zreprodukovat :/

radekmat
Člen | 4
+
0
-

Ahoj – klasicky přes Firebug.
V response mi to pak vrátí celou stránku – a neprojde to přes invalidaci.
Peru se s tím už docela dlouho a blíží se čas nasazení. Jinak grido je perfektní – jen ty filtry mne pálí.

o5 napsal(a):

radekmat napsal(a):

Request se odesílá POSTem, nikoliv přes GET parametry a datagrid se ani neinvaliduje.

A jak si prosím tě zjistil, že se posíla POSTem? Že se nic nepřidalo za hash (#) nebo si se koukal do Developer tools → Network → XHR a tam si opravdu viděl POST??

A dělá ti to i grido-sandbox? Potřeboval bych více informací, abych to dokázal zreprodukovat :/

o5
Člen | 416
+
0
-

@radekmat: je to fakt divný, rád bych pomohl, ale nedokážu to zreprodukovat, takže se blbě hledá problém. Jako hotfix můžeš vypnout ajax, ale je to takové řešení naprd no.

radekmat
Člen | 4
+
0
-

ještě mne napadá jestli to nemůže být problém v něčem jiném – něco v javascriptu nette form, že by nebral v potaz metodu formuláře a vše odesílal přes POST???

edit:
Tak ano, problém byl v javascriptu – všechny formuláře odesílal pouze přes POST.
To je tedy pech. Tedy pokud někdo bude mít problém s tím, že stránkování funguje ale filtry nikoliv – nechť si zkontroluje odesílání dotazu.

Grido forever – implementace bezproblémová, skvěle skinovatelná věc.

Snad ještě jeden dotaz – týká se to hezkých URL – grido mám nasazené na frontendu ty url se mi moc nelíbí :) vím, že jsem rejpal – nic proti Tvé práci – to chraň Bůh – kdybych si to měl psát tak bych se asi zbláznil… ušetřilo mi to fůru času… kdyby byl někde DONATE BUTTON, tak mile rád vývoj podpořím…

o5 napsal(a):

@radekmat: je to fakt divný, rád bych pomohl, ale nedokážu to zreprodukovat, takže se blbě hledá problém. Jako hotfix můžeš vypnout ajax, ale je to takové řešení naprd no.

Editoval radekmat (12. 12. 2013 0:24)

o5
Člen | 416
+
0
-

radekmat napsal(a):

ještě mne napadá jestli to nemůže být problém v něčem jiném – něco v javascriptu nette form, že by nebral v potaz metodu formuláře a vše odesílal přes POST???

Mohl by jsi trochu více rozvést v čem byl problém a hlavně jak si ho vyřešil? Opravdu by mě to zajímalo.

radekmat napsal(a):

Snad ještě jeden dotaz – týká se to hezkých URL – grido mám nasazené na frontendu ty url se mi moc nelíbí :)

Nevím sice jak (nezkoumal jsem to), ale mohlo by přeci nějak jít udělat routy na komponenty (pokud někdo rout znalý toto čte, nechť mi to vyvrátí :) )

radekmat napsal(a):

kdyby byl někde DONATE BUTTON, tak mile rád vývoj podpořím…

Dotane button sice není, ale číslo účtu mám uvedeno na svých webovkách ;)

radekmat
Člen | 4
+
0
-

Jistě – mohu.

ad 1:
Problém byl v použití nějakého podivného nette.ajax.js který odesílal všechny formuláře přes POST.
Nerespektoval nastavení danného formuláře. Ve své podstatě jsem si slepě myslel, že problém bude na straně grida, ale nebyl. Nikde jinde na svých stránkách ajax odesílání formuláře nemám – takže jsem ani dříve neměl jak zjistit, že je chyba v javascript souboru. Stačilo si stáhnout oficiální nette.ajax.js a bylo vyřešeno.

ad 2:
jasné – zkusím to – ne že bych byl nějaký expert přes routování v nette. V Nette stejně moc dlouho nedělám. Pokud by šlo nějak nastavit pro tuto komponentu /např. v presenteru – nevím/ routes pak by to bylo super.

ad 3:
očekávej skromný leč upřimný příspěvek :)

o5 napsal(a):

radekmat napsal(a):

ještě mne napadá jestli to nemůže být problém v něčem jiném – něco v javascriptu nette form, že by nebral v potaz metodu formuláře a vše odesílal přes POST???

Mohl by jsi trochu více rozvést v čem byl problém a hlavně jak si ho vyřešil? Opravdu by mě to zajímalo.

radekmat napsal(a):

Snad ještě jeden dotaz – týká se to hezkých URL – grido mám nasazené na frontendu ty url se mi moc nelíbí :)

Nevím sice jak (nezkoumal jsem to), ale mohlo by přeci nějak jít udělat routy na komponenty (pokud někdo rout znalý toto čte, nechť mi to vyvrátí :) )

radekmat napsal(a):

kdyby byl někde DONATE BUTTON, tak mile rád vývoj podpořím…

Dotane button sice není, ale číslo účtu mám uvedeno na svých webovkách ;)

o5
Člen | 416
+
0
-

radekmat napsal(a):

ad 2:
jasné – zkusím to – ne že bych byl nějaký expert přes routování v nette. V Nette stejně moc dlouho nedělám. Pokud by šlo nějak nastavit pro tuto komponentu /např. v presenteru – nevím/ routes pak by to bylo super.

Protože mě to samotnýho zajímalo, zkusil jsem experimentovat…

use \Nette\Application\Routers\Route;

$container->router[] = new Route("<presenter>/<action>/<grid-page>/<grid-filter>/", [
    'presenter' => 'Default',
    'action' => 'default',
    'grid-page' => 1,
    'grid-filter' => [
        Route::VALUE => NULL,
        Route::FILTER_IN => function($filter) {
            $output = [];
            $params = explode(';', $filter);
            foreach ($params as $param) {
                list ($key, $val) = explode('=', $param);
                $output[$key] = $val;
            }

            return $output;
        },
        Route::FILTER_OUT => function($filter) {
            return $filter
                ? http_build_query($filter, '', ';')
                : NULL;
        }
    ]
]);

Převede:

/?grid-page=2&grid-filter[gender]=female&grid-filter[card]=MasterCard

na

/2/gender=female;card=MasterCard/

Samozřejmě se tím posere hashchange, takže zkoušet mimo ajax.

Editoval o5 (12. 12. 2013 19:47)

black72
Člen | 5
+
0
-

Díky za Grido. Jsem začátečník a všechno zatím dávám dohromady podle příkladů, které si upravuji podle potřeb. Chci se zeptat jestli je nějak možné do sloupce místo dat z DB vypsat výsledek funkce, která dostane ID záznamu, ale data pro výsledek si natáhne sama z jiných zdrojů (třeba data z jiného serveru). Zkoušel jsem udelat

$grid->addColumnText('soucet', 'součet')
                ->setCustomRender(function($row) { .....;return $vystup; };);

Vždy skončím na tom, že funkce nemá přístup k modelům, případně chyba nesprávného počtu argumentů, když se pokusím si je tam poslat.

Díky za postrčení.

David Matějka
Moderator | 6445
+
0
-

@black72: jakou chybu presne ti to ukazuje?

do anonymni fce dostanes nejakou promennou z nadrazenyho kontextu pomoci use, takze

$fooModel = $this->fooModel;
...->setCustomRender(function($row) use($fooModel) { .... });
Re4DeR
Člen | 71
+
0
-

plánujes udelat podporu řazení podle více sloupců ?

Petr Bugyík
Člen | 4
+
0
-

Re4DeR napsal(a):

plánujes udelat podporu řazení podle více sloupců ?

Ne neplanuju.

MartyIX
Člen | 217
+
0
-

Petr Bugyik: Ahoj, nevydal bys, prosim, verzi pro Nette 2.1, aby slo Grido nainstalovat pres Composer?

Povedlo se mi to nainstalovat i tak, ale musel jsem pridat:

"minimum-stability": "dev",
"prefer-stable": true,

Jen musim zjistit, co jsem to vlastne udelal :))

o5
Člen | 416
+
0
-

@MartyIX:

Hm, mam teda odriznout nette 2.0.x timto??

"nette/nette" : ">=2.1",

Nebo radeji

"nette/nette" : ">=2",