Grido a podmíněné akce (+ další otázky ohledně Grida)

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

Zdravím,

snažím se vypsat faktury pomocí grida, rozhodl jsem se ho používat u všech tabulek.

Mám ale spoustu otázek ohledně toho, jak například mohu přidat podmíněnou akci? Chtěl jsem například přidat akci „Zaplaceno“ (pomocí metody addActionHref), na nastavování tohoto údaje mám akci presenteru setPaid. Udělal jsem to tedy tak, jak je vidět v ukázce mého kódu níže. Nastavil jsem customHref abych mohl funkci předat ještě parametr ‚state‘. Problém ale je, že u zaplacených objednávek chci mít akci „Nezaplaceno“, a u nezaplacených zase akci „Zaplaceno“. Jediné co mě ale napadlo je přidat dvě odlišná tlačítka (akce) a tyto tlačítka podmínit právě statusem platby, nepřišel jsem ale na to jak to udělat.

Moje otázky tedy jsou:

Jak přidat akci (tlačítko) tak, abych ji mohl podmínit nějakým parametrem?

Jak přiřadit tlačtku css třídu? (Používám v backendu bootstrap takže bych těm tlačitkům rád přiřadil třídy například btn a btn-danger či btn-info)

Lze něco z těch věcí z kódu dole napsat lépe?

Kód:

protected function createComponentGrid($name)
    {
        $grid = new Grido\Grid($this, $name);
        $grid->setModel($this->ordersModel->findAll());

        $grid->setTranslator($this->translator);

        $grid->addColumnDate('created', 'Datum');

        $grid->addColumnText('invoice', 'Číslo objednávky');

        $grid->addColumnText('status', 'Stav')
            ->setCustomRender(
                function ($item) {
                    return $this->translator->translate($this->ordersModel->statuses[$item->status]);
                }
            );

        $grid->addColumnText('name', 'Jméno')
            ->setCustomRender(
                function ($item) {
                    return "$item->name $item->surname";
                }
            );

        $grid->addColumnNumber('total_sum', 'Suma')
            ->setCustomRender(
                function ($item) {
                    return $this->exchange->format($item->total_sum);
                }
            );

        $grid->addColumnText('payment_status', 'Zaplaceno')
            ->setCustomRender(
                function ($item) {
                    return ($item->payment_status ? $this->translator->translate("Ano") : $this->translator->translate("Ne"));
                }
            );

        $grid->addActionHref('edit', 'Upravit');

        $grid->addActionHref('setPaid', 'Zaplaceno')
            ->setCustomHref(
                function ($item) {
                    return $this->link('setPaid', ['id' => $item->id, 'state' => 1]);
                }
            );

        $grid->setDefaultSort(['created' => 'DESC']);
        $grid->setDefaultPerPage(40);
        $grid->setPrimaryKey('id');
    }

Předem děkuji za jakékoliv odpovědi..

CZechBoY
Člen | 3608
+
+3
-

Pokud seš teprv na začátkupředělávání na nějaký grid, tak bych doporučil ublaboo/datagrid, který je aktuálně víc vyvíjený než o5/grido.

Nax
Člen | 35
+
0
-

CZechBoY napsal(a):

Pokud seš teprv na začátkupředělávání na nějaký grid, tak bych doporučil ublaboo/datagrid, který je aktuálně víc vyvíjený než o5/grido.

Díky za odpověď.

Prozkoumal jsem to a vypadá to dobře, asi do toho pujdu. Díky za tip.

Nax
Člen | 35
+
0
-

CZechBoY napsal(a):

Pokud seš teprv na začátkupředělávání na nějaký grid, tak bych doporučil ublaboo/datagrid, který je aktuálně víc vyvíjený než o5/grido.

Ještě jsem se chtěl zeptat, i u tohodle i u grida jsem měl problém s překlady. Oni používají k indexaci těch překladů stringy typu ublaboo_datagrid.from, jenze shop kteremu davam ten grid pouziva livetranslator a preklady indexuje ceskym prekladem.. Nevim jak tento problem vyresit

GEpic
Člen | 566
+
0
-

Já bych ti zase doporučil twigrid, kde si toto podmínění prostě uděláš v latte šabloně každého gridu. :)

Nax
Člen | 35
+
0
-

GEpic napsal(a):

Já bych ti zase doporučil twigrid, kde si toto podmínění prostě uděláš v latte šabloně každého gridu. :)

Tak mně se to nakonec povedlo u toho ublaboo datagridu, vypada to dost dobre.. Klidne bych se podival i na tenhle jenze uz jsem tomu venoval moc casu :-/

CZechBoY
Člen | 3608
+
0
-

@Nax To by mělo bejt jedno, ne? Nebo nemůžeš prostě dát, že pro češtinu je ublaboo_datagrid.from překlad Od? Se mi podle krátkýho zkouknutí testů zdá, že by to tak mělo fungovat.

@GEpic a teď se tady nahrnou všechny datagridy :D ikdyž twigrid si myslim, že by byla taky dobrá náhrada :-)

GEpic
Člen | 566
+
0
-

@CZechBoY :D .. snad ne .. datagridů na Nette je hodně, a když jsem začínal, už tehdy jich byl přehršel a stálo mě neskutečně hodně času najít nějaký, který mě nebude omezovat. Mě osobně přišla jako hloupost, snažit se naťukat celý grid v PHP, když máme Latte, které se může krásně postarat o to, jak výsledný grid bude vypadat. Přijde mi to koncepčně správně.

Editoval GEpic (18. 1. 2017 22:58)

Pavel Janda
Člen | 977
+
+2
-

@Nax Podmíněné akce jsou myslím u ublaboo/datagridu dobře vyřešené. Můžeš se rozhodnout, jaké akce u položky zobrazíš, jestli zobrazíš hromadné akce a taky jestli zobrazíš inline editaci.

Nebo jak tu již bylo také zmíněno, můžeš si vše pořešit i v šabloně.

S těmi překlady je tohle takový standard. Ale jednoduše by ti měl jít použít (v repozitáři přiložený a použitý) SimpleTranslator, kterému dáš jen hash s překlady. To je vhodné řešení pro projekt, pokud máš jinak nastavené slovníky.

@GEpic Bylo jich hodně a je ještě víc. Když jsem používal dataridy jiné, každému něco chybělo. Tak jsem si napsal vlastní. Co si člověk neudělá, … Znáte to. :D