RadioList ručne v latte – nastavení ID a Labelů

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

Zdravím všechny,
snažím se ručně v šabloně vykreslit RadioList, protože mám formulář v komponentě a tu si násobím pomocí Nette\Application\UI\Multiplier.
Problém nastal v případě, že více formulářů vykresluji na jedné stránce. Musel sem vykreslit v šabloně inputy s labely a nastavit jim příslušná ID podle jména komponenty(přidal jsem číslo), aby se neovliňovaly Labely.

Problém nastal u RadioListu, kde nejsem schopen nastavit ID u jednotlivých položek.
Prošel jsem už desítky vláken na fóru, ale nikde se to nevyřešilo, nebo se řešilo trochu něco jiného.
https://forum.nette.org/…ist-in-latte – zde je to blízko, ale pořád dostanu objekt HTML, kterému nemůžu nastavit ID – alespoň nevím jak.

Potřebuji prostě jednotlivým prvkům RadioListu ručně ID v šabloně a Labelům nastavit paramter ‚for‘, protože když mám více formulářů na stránce, tak všechny mají stejné ID a kliknutí na label ovliňují jen první RadioList.

Možná je zakopaný pes úplně jinde, protože mi nepřijde košér, aby zůstavalo ID inputů stejné při použití Nette\Application\UI\Multiplier. Má se toto nastavovat v továrničce?

Předem děkuji za pomoc.

mkoubik
Člen | 728
+
0
-

Zkus něco jako {foreach $form['control']->items as $id => $value}.

ajda2
Člen | 66
+
0
-

Zkoušel jsem tohle

<?php
{foreach $form['open']->items as $key => $value}
	{var item= $form['open']->getControl($key)}
	{$item}
{/foreach}
?>

Jenže tím získám do $item celý input i s labelem, bez možnosti jim změnit id a for.
Potřebuju něco jako

<?php
{foreach $form['open']->items as $key => $value}
	{$item id => "noveID"}{label for => "noveID"}
{/foreach}
?>

A nějak potřebuju získat ten Input a label.
Přijde mi celkem jako nesmysl, že by to Nette nějak neřešil – tím myslím celkově u komponent, že nijak nerozlišuje, že se jedná o kopii komponenty. Takto se ovlivňují elementy mezi komponentami.

mkoubik
Člen | 728
+
0
-

Input/label získáš jako $item->getChildren()[0] resp. $item->getChildren()[1], ale to už mi přijde dost přehnaný.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Můžeš vyzkoušet tohle rozšíření formulářových maker. Nemám to nijak durch otestované, ale pokud pomůže, budu rád :).

https://gist.github.com/1474583

ajda2
Člen | 66
+
0
-

vojtech.dobes: Moc děkuju! Funguje.
Tvé řešení jsem našel a také zkoušel, ale nefungovalo mi to(Už sem byl asi roztržitý).
Každopádně už mi to funguje.
Bylo jen potřeba změnit metodu install na

<?php
public static function install(Latte\Compiler $parser)
?>

Nyní mi to teda funguje v šabloně takto

<?php
{var i = 0}
{inputlist RadioButtons}
	{input id => "radio-".$i."-".$control->name}
	{label for => "radio-".$i."-".$control->name}<br>
	{var $i++}
{/inputlist}
?>

Funkční to je, ale přijde mi to dost nečisté a nešikovné.

Nejde nějak v Nette zařídit, aby se do ID formulářových elementů automaticky přidávalo $control->name při použití Nette\Application\UI\Multiplier ?