DataGrid – callback function

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

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
+
0
-

Ukaž, jak vypadá ta tvoje metoda Produkt::getNazevProduktu.

a.m
Člen | 10
+
0
-

Je to cca toto:

public static function getNazevProduktu($produktId)
{
	$nazevProduktu = dibi::fetch("SELECT * FROM `Produkt` WHERE `produktId` = %i", $produktId);
	$_nazevProduktu = $nazevProduktu['vyrobceNazev'].' '.$nazevProduktu['produktNazev'];
	return $_nazevProduktu;
}
Ondřej Mirtes
Člen | 1536
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

Zkus to zaregistrovat takhle:

$grid['produktNazev']->formatCallback[] = array($this,'Produkt::getNazevProduktu');
Ola
Člen | 385
+
0
-

Spíš to zkus upravit takhle:

$grid['produktNazev']->formatCallback[] = callback('Produkt::getNazevProduktu');

funkce callback z nette ten zápis upraví tak, aby běžel na všech verzích PHP, což je pravděpodobně příčina chyby.

Editoval Ola (10. 2. 2010 15:40)