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

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

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
+
0
-

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
+
+5
-

Možná bychom mohli do Nette přidat kromě class, taky +class a pro konzistenci i -class.

David Grudl
founder | 8310
+
0
-

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.

RSS tématu Téma zavřeno