Formulářová makra: jak přidat třidu?

- Šaman
 - Člen | 2668
 
Ahoj, potřebuji v šabloně přidat třídu do formuláře. Nasledující kód mi však zahodí všechny původní třídy a nastaví jen tu ze šablony. Já ji chci ale přidat k těm, které si nese formulář. Víte někdo jak na to, pls?
{input dateTo} <!-- vyrenderuje <input ... class="date hasDatepicker"> -->
{input dateTo, class=>'form-control'} <!-- vyrenderuje <input ... class="form-control"> -->
<!-- chci dosáhnout: <input ... class="date hasDatepicker form-control"> -->
				
- Zax
 - Člen | 370
 
Tohle jsem taky nedávno řešil a trochu blíž zkoumal chování.
Mějme formulářový prvek
$form->addText('name', 'Jméno')
	->getControlPrototype()
		->addClass('test');
<input n:name="name" class="form-control">
<!-- vygeneruje class="form-control" -->
<input n:name="name" n:class="form-control">
<!-- vygeneruje class="test" -->
{input name, class => form-control}
<!-- vygeneruje class="form-control" -->
První příklad vygeneruje pouze „form-control“, protože když Latte
vidí v elementu class, tak automaticky zruší cokoliv bylo nastavené
v inputu, aby ve výsledném html nebyly dva stejné atributy (ve zkompilované
šabloně je cca toto:
echo $control->addAttributes(['class' => NULL])->attributes()).
Druhý příklad s n:class jsem podrobně nezkoumal.
Třetí příklad se správně přeloží do
echo $control->addAttributes(['class' => 'form-control']),
kámen úrazu je ale v tom, že metoda addAttributes používá funkci
array_merge, nikoliv array_merge_recursive. Těžko
říct, zda je to tak správně…
Editoval Zax (11. 3. 2015 3:35)

- Jan Tvrdík
 - Nette guru | 2595
 
Možná bychom mohli do Nette přidat kromě class, taky
+class a pro konzistenci i -class.

- David Grudl
 - Nette Core | 8285
 
Z pohledu Latte parseru není +class symbol, takže je třeba
parametry ve FormMacros zpracovat ručně, podobně jako to dělá třeba
macroVar. Není to nijak zásadně složitý úkol, tak to třeba někdo
implementuje.