Grido a podmíněné akce (+ další otázky ohledně Grida)
- Nax
- Člen | 35
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
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
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
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
- CZechBoY
- Člen | 3608
@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
@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
@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