\Nette\Utils\Html: jak přidat třídu elementu, který už má třídu nastavenou?

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

Zdravím,
mám celkem triviální problém, ale nemůžu přijít na způsob, jak to provést, aby to fungovalo podle mých potřeb.

Mám nějaký html element:

$el = new \Nette\Utils\Html::el('something');

Přidám mu html třídu:

$el->addAttributes(['class' => 'myClass']);

Později mu chci přidat další třídu, nevím a nezajímá mě, jestli už nějaké třídy má, ale chci, aby měl původní třídy plus tu novou:

$el->addAttributes(['class' => 'newClass']);

Co potřebuju je, aby v atributu class byla hodnota 'myClass newClass'. Z principu fungování metody addAttributes to ale vypadá, že to není možné. Jdu na to špatně, nebo to fakt nejde nijak udělat?

Blujacker
Člen | 89
+
+3
-

Ahoj,

tusim, ze by to melo jit pres

$el->class[] = "class1";
$el->class[] = "class2";

Nyni by element mel mit tridy class = "class1 class2"

Casper
Člen | 253
+
0
-
<?php
$el->addClass('newClass');
?>
greeny
Člen | 405
+
+1
-

zrovna dneska jsem to řešil, IMHO by Html třídě prospěly metody na práci s CSS třídama, které většinou vyžadují trochu jiný přístup než normální atritbuty (koneckonců, data- atributy mají taky svoje třídy)

chikeet
Člen | 160
+
0
-

Tak to funguje trochu jinak, než bych čekala. Zatímco při přidání přes $el->addAttributes() vrací $el->class řetězec, při přidání přes $el->class[] je to pole [0 => 'class1', 1 => 'class2'], což pak trochu komplikuje renderování (nemůžu v latte jednoduše napsat class => "someClass $el->class"). Škoda.

Editoval chikeet (15. 4. 2015 23:00)

chikeet
Člen | 160
+
0
-

Tady je výsledný výstup $el->class asi nejmíň očekávaný, je to ['newClass' => TRUE], což mi teda není moc jasné, k čemu je to dobré. Je to vtipné, člověk by čekal, že budou ty tři způsoby ± rovnocenné, a ono ne…

Editoval chikeet (15. 4. 2015 22:58)

chikeet
Člen | 160
+
0
-

Takže nakonec mi tu správnou práci udělá $el->addAttributes(['class' => "$el->class $class"]);. Konec dobrý, všechno dobré… :-)

Casper
Člen | 253
+
0
-

Přehlédl jsem, že potřebuješ výstup $el->class, nikoli obsah class při renderování…

chikeet
Člen | 160
+
0
-

Jde mi primárně o získání tříd formulářového inputu, abych k nim při renderování mohla přidat vlastní. Řeším custom renderování pro bootstrap a BootstrapFormRenderer mi tak docela nestačí.