DataGrid – callback function
- a.m
- Člen | 10
Zdravím všechny nettaře,
už se několik hodin trápím s DataGridem (díky za skvělou komponentu, ušetřila mi hodně práce a uživatelé jsou za ní vděční!). Potřebuju hodnoty jednoho sloupečku před jejich zobrazením prohnat svou funkcí. Zkoušel jsem to udělat všemožně podle dokumentace nebo rad tady na fóru, ale ne a ne se zadařit.
Konkrétně se jedná o:
- v DataGridu zobrazuju seznam produktů v naší databázi
- mám model Produkt a v něm static funkci getNazevProduktu()
- sloupeček produktNazev v datagridu bych potřeboval prohnat funkcí Produkt::getNazevProduktu() před zobrazením hodnoty
Našel jsem konstrukci:
$grid['produktNazev']->formatCallback[] = 'Produkt::getNazevProduktu';
ale s tou mi to ne a ne pracovat. Zkoušel jsem i funkci zaregistrovat jako Helper nebo na sloupeček nevolat svou funkci, ale už nějaký fungující helper, ale nic nereaguje. Dělám někde nějakou chybu?
Díky za jakoukoli pomoc.
- Ondřej Mirtes
- Člen | 1536
Nevidím na první pohled, proč to nefunguje, ale proč to dáváš jako formátovací callback, aby se to spouštělo u každého řádku zvlášť (tzn. hodně dotazů na databázi) a nenajoinuješ si to v data sourcu pro datagrid?
- a.m
- Člen | 10
Ona je ta funkce ve skutečnosti složitější a JOIN nebo jiná databázová operace by na to použít nešla. Ale zkusím to asi upravit přímo v datasource, jinak už mě fakt nic nenapadá.
Callback mi nefunguje ani v případě, kdy použiju následující funkci:
public static function getNazevProduktu($value)
{
return 'Test: '.$value;
}
Ani když použiju tohle, tak se políčko na výstupu neupraví.
- Ondřej Mirtes
- Člen | 1536
A nějakou chybu to nezahlásí? A přiřazuješ ten callback v továrničce nebo někde před samotným výpisem dat?
Jinak se vsadím, že ta situace určitě jde vyřešit tak, aby se nemusel volat dotaz nad každým řádkem (to je totiž na popravu) – nechceš sem postnout svůj kompletní kód, nebo popsat, co to má dělat?
- ClaryAldringen
- Člen | 5
Zkus to zaregistrovat takhle:
$grid['produktNazev']->formatCallback[] = array($this,'Produkt::getNazevProduktu');