DataGrid – jak vypnout escapovani?

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

Mam-li v databazi text ‚Žluťoučký kůň‘ nebo <a href=„…“>odkaz</a>, tak ho datagrid pri vypisu automaticky escapuje na neco podobneho tomuhle:

&#381;lu&#357;ou&#269;k&yacute; k&#367;&#328; apod.).

Da se tomu jednoduse zabranit? Necim jako:

$data = $model->seznamZprav();
$grid->bindDataTable($data);
$grid->addColumn('zprava', 'Zpráva')
  ->noescape();
Honza Kuchař
Člen | 1662
+
0
-

https://componette.org/search/?…
Pokud vím, tak by ti měl pomoci formatCallback.

// předpokládejme sloupec, jehož obsahem je například velikost souboru
$grid['size']->formatCallback[] = 'TemplateHelpers::bytes';
kozel
Člen | 14
+
0
-

.. callback, ktery si musim napsat sam :(. Ok.

Honza Kuchař
Člen | 1662
+
0
-

Teď mě tak napadlo (nezkoušel jsem to), ale teoreticky by mělo fungovat, ale nefunguje

$grid['size']->formatCallback[] = 'echo';

// EDIT: ale funguje tohle:

function decodeHTML($s){
	return htmlspecialchars_decode($s);
}

$grid['size']->formatCallback[] = 'decodeHTML';

Editoval honzakuchar (11. 8. 2009 18:20)

kravčo
Člen | 721
+
0
-

honzakuchar napsal(a):

Teď mě tak napadlo (nezkoušel jsem to), ale teoreticky by mělo fungovat, ale nefunguje

$grid['size']->formatCallback[] = 'echo';

Toto zrejme nefunguje kvôli faktu, že echo nie je funkcia, ale jazykový konštrukt, podobne ako array či list.

Honza Kuchař
Člen | 1662
+
0
-

No hlavně funkce navěšná na formatCallback musí vracet upravený string. Nikoli ho vypsat.

P.S.: Jako druhý parametr formatCallback se předává DibiRow.

PetrP
Člen | 587
+
0
-

Tak ono to naráží na fakt že bys v databázi neměl mít htmlko který chceš vypsat do datagridu. ;]
Takže by si neměl přemíslet jak to odescapovat ale jak to html tam nemít.