Ublaboo Datagrid – export renderer

Šaman
Člen | 2662
+
0
-

Ahoj, potřebuji v Datagridu mít vlastní renderer (zkrácení nějakého sloupce s dlouhou hodnotou), ale v exportu tohle zkracování nechci. Je možné definovat buď dva různé renderery (pro zobrazení a jiný pro export), nebo v jednom rendereru zjistit, jestli právě vytvářím export, či ne? Díky.

Pavel Janda
Člen | 977
+
+1
-

@Šaman Určitě jo. Pro export můžeš definovat zvlášť sloupce, viz https://ublaboo.org/datagrid/export:

$columnName = new Ublaboo\DataGrid\Column\ColumnText($grid, 'name', 'name', 'Name');
$columnEven = (new Ublaboo\DataGrid\Column\ColumnText($grid, 'name', 'even', 'Even ID (yes/no)'))
	->setRenderer(function($item) { return $item['id'] % 2 ? 'No' : 'Yes'; });

$grid->addExportCsv('Csv export', 'examples.csv')
	->setTitle('Csv export')
	->setColumns([
		$columnName,
		$columnEven
	]);

Takže být tebou udělám nějakou factory na všechny sloupce a ty si předáš jak do gridu tak do exportu. Akorát u exportu bude místo zkráceného sloupce sloupec jiný, nezkrácený.

Šaman
Člen | 2662
+
+1
-

Aha, díky. :)
V noci jsem našel ještě druhý způsob – událost onExport. V ní jsem přepsal ony renderery novým, který jen vypíše hodnotu.

kajinek32
Člen | 35
+
0
-

A kdyby někdo hledal syntaxi, jak řešit OnExport, tak příklad tady (snad je správně :))

(řešil jsem situaci, kdy v poli pro e-mail máme standardně i nějaký balast (ikonky, apod)

 $grid->onExport[] = function($grid){
                $grid->getColumn("user_email")->setRenderer(function($row) {
                    return $row->user_email;
                });
            };