Obarvení řádku v ublaboo datagridu

ImUnicorn
Člen | 12
+
0
-

Zdravím,

potřeboval bych obarvit(background-color) řádek v ublaboo datagridu. Snažím se to udělat takhle:

		$this->setRowCallback( function( $item, $tr ) use ( $presenter, $user, $usersRegions ) {
			if( ! $this->isUserAllowedRow( $user, $item, $usersRegions ) )
			{
				$tr->addClass( 'warning' );
			}

			$labels = $item->doctorLabels->get()->fetchAll();

			if(\count($labels) > 1) {
    /** @var Html $tr */
    $tr->addStyle[] = 'background-color:' . DoctorLabel::DEFAULT_BACKGROUND_COLOR . ";";
} elseif(\count($labels) === 1) {
			    if (isset($labels[0]->hexColor)) {
        $tr->addStyle[] = 'background-color:' . $labels[0]->hexColor;
    }
}
		});

Bohužel tohle nefunguje. Němáte někdo nějakou radu? Díky.

Editoval ImUnicorn (6. 12. 2018 17:21)

Ondřej Kubíček
Člen | 494
+
0
-

$tr je klasický nette html object ne?
na $addStyle[] jsi přišel jak? myslím že takhle to bude fungovat

$tr->addStyle('background-color:' . DoctorLabel::DEFAULT_BACKGROUND_COLOR)

ale spíš bych si nastavil třídu, která ti to obarví

ImUnicorn
Člen | 12
+
0
-

Ondřej Kubíček napsal(a):

$tr je klasický nette html object ne?
na $addStyle[] jsi přišel jak? myslím že takhle to bude fungovat

$tr->addStyle('background-color:' . DoctorLabel::DEFAULT_BACKGROUND_COLOR)

ale spíš bych si nastavil třídu, která ti to obarví

Ano. Je to Nette HTML objekt. Bohužel nefunguje i řešení, co jsi napsal ani to z dokumentace.

	Nette\Utils\Html #6cd8
	attrs => array (1)
		style => array (1)
			"background-color" => "#ff0000" (7)
	children protected => array ()
	name private => "tr" (2)
	isEmpty private => false

Tohle vrací dump po přidání stylu. Je to správně, akorát v HTML kódu ten atribut prostě není. Přidat třídu nemohu, protože si uživatel vybírá barvu z colorpickeru a nemůžu mít pro každou barvu třídu.

ImUnicorn
Člen | 12
+
0
-

Nikoho nic nenapadá? Přidáná class funguje, ale style prostě ne.

andros
Člen | 145
+
0
-

Já používám způsob, který je v dokumentaci a který zmiňuješ a funguje mi to.

$grid->setRowCallback(function($item, $tr) {
	$tr->addClass('super');
});
Pavel Kravčík
Člen | 1180
+
0
-

Nemělo by to být $tr->style()?

ImUnicorn
Člen | 12
+
0
-

Zkoušel sem několik možností a bez výsledku. Když si dumpuji ten řádek, tak tam ten styl je, ale na front-endu prostě ne. Možná nějaký bug? @DavidGrudl

ImUnicorn
Člen | 12
+
0
-

Zkusil sem přidat atributa data-color a že bych to vyřešil na front-endu javascriptem. Data atribut se bohužel taky nepřidá.

$tr->data('color', 'white');

Už si s tím nevím rady..

Ondřej Kubíček
Člen | 494
+
0
-

díval jsem se rychle na api toho datagridu a myslím, že napřímo to neumí, že bys musel mít poděděnou svoji šablonu, on si totiž vezme jen id a classy

Editoval Ondřej Kubíček (18. 12. 2018 13:35)

ImUnicorn
Člen | 12
+
0
-

Ondřej Kubíček napsal(a):

díval jsem se rychle na api toho datagridu a myslím, že napřímo to neumí, že bys musel mít poděděnou svoji šablonu, on si totiž vezme jen id a classy

Kde prosím si našel, že si to z toho bere(soubor)? Bych to doprogramoval a dal pull request. Myslím si, že to není špatná věc.

ali
Člen | 342
+
0
-

Udelej si Nette\Utils\Html objekt se stylem a vykreli si ho mimo jakoukoliv komponentu a uvidis, jestli tam je bug nebo ne, misto pingovani Davida. Nicmene, pokud to nejde pres style, pouzij class, pres kterou barvu menim ja a vim ze funguje.

ImUnicorn
Člen | 12
+
0
-

@OndřejKubíček
Už sem to našel.

@ali
Ondra má pravdu. Datagrid si vytahuje pouze class. Musím si tam doprogramovat, aby vytahoval i style.