Vlastni FormControl label
- Elijen
- Člen | 171
Pokouším vykreslit jeden formulář skládající se z většího počtu checkboxů, labelů a odesílacího tlačítka. Chtěl bych je zarovnat do tří sloupců.
Tedy bych potřeboval label i chackbox zvlášť obalit tagy ‚td‘ (s možností nastavení attributu class).
Výsledek by měl vypadat takto:
<tr>
<td class="checkbox"><input type="checkbox" name="cat[]" value="1" id="cat-1" /></td>
<td class="label"><label for="cat-1">Category 1</label></td>
<td class="checkbox"><input type="checkbox" name="cat[]" value="2" id="cat-2" /></td>
<td class="label"><label for="cat-2">Category 2</label></td>
<td class="checkbox"><input type="checkbox" name="cat[]" value="3" id="cat-3" /></td>
<td class="label"><label for="cat-3">Category 3</label></td>
</tr>
<tr>
<td class="checkbox"><input type="checkbox" name="cat[]" value="4" id="cat-4" /></td>
<td class="label"><label for="cat-4">Category with very very long name that don't fit</label></td>
<td class="checkbox"><input type="checkbox" name="cat[]" value="5" id="cat-5" /></td>
<td class="label"><label for="cat-5">Category 5</label></td>
<td class="checkbox"><input type="checkbox" name="cat[]" value="0" id="cat-0" /></td>
<td class="label"><label for="cat-0"><i>Uncategorized</i></label></td>
</tr>
<tr>
<td class="checkbox"><input type="checkbox" name="cat[]" value="all" id="cat-all" /></td>
<td class="label"><label for="cat-all"><i>All</i></label></td>
</tr>
V případě, že by checkboxy byly statické, vykreslil bych je ručně v šabloně, ale já je tahám z DB a je tedy potřeba formulář sestavit dynamicky, což by (imho) šablonu značně zaprasilo.
Tedy konečně k otázce: Je možné každý label a input zvlášť obalit
nějakým kódem? Zkoušel jsem toto, ale chybí metoda
setLabel()
;-(
$label_container = Html::el('td');
$label_container->class = 'label';
$checkbox = $form->AddCheckbox($name, $caption);
$label = $checkbox->getLabel();
$label->setHtml($label_container->add($label));
Jak byste to řešili vy?
Předem dík ;-)
Editoval Elijen (29. 8. 2010 3:41)
- pEeLL
- Člen | 23
v rámci ručního vykreslení tě to bude stát pár řádků a bude to bez problémů.
pokud trváš na řešení v php tak si pohraj s
$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container']
$renderer->wrappers['pair']['container']
$renderer->wrappers['label']['container']
$renderer->wrappers['control']['container']
Editoval pEeLL (29. 8. 2010 9:06)
- Elijen
- Člen | 171
V šabloně nemam tušení jak bych to řešil … hlavně jak vyřešit to, aby se do každého řádku tabulky vypsali maximálně tři checkboxy?
S polem $wrappers jsem si hrát zkoušel, ale [‚label‘][‚container‘] funguje jinak, než bych očekával :-/
Při tomto nastavení (když chci další řádek zavolám
$form->AddGroup()
)
$renderer->wrappers['control']['container'] = "td";
$renderer->wrappers['pair']['container'] = NULL;
$renderer->wrappers['label']['container'] = "td";
$renderer->wrappers['group']['container'] = "tr";
$renderer->wrappers['controls']['container'] = NULL;
$renderer->wrappers['form']['container'] = "table";
Dostanu toto (místo toho, aby se tagem ‚td‘ obalil label inputu se
vytvoří <td> </td>
<tr>
<td> </td>
<td><input type="checkbox" name="0" id="frm-0" /><label for="frm-0">Category 1</label></td>
<td> </td>
<td><input type="checkbox" name="1" id="frm-1" /><label for="frm-1">Category 2</label></td>
<td> </td>
<td><input type="checkbox" name="2" id="frm-2" /><label for="frm-2">Category 3</label></td>
</tr>
Navíc potřebuju conatineru nastavit attribut class. Zatím mi přijde nejjednodušší podědit ConventionalRenderer a trochu ho upravit/doplnit.
Editoval Elijen (29. 8. 2010 15:50)
- Elijen
- Člen | 171
Tak vyřešeno rozšířením ConventionalRener
u a přepsáním
metody renderControl
… stále mi ale nejde do hlavy, proč má
Checbox vlastně dva labely. Jeden je HTML tag label (který se IMHO
nešťastně vykresluje napevno současně s inputem) a druhý jakýsi popisek,
který se zabalí do tagů definovaných v poli
$wrappers['label']['container']
. Nicméně text, který se do tagů
vloží je buď prázdný řetězec nebo ‚ ‘. Dost
podivné :-/
Editoval Elijen (30. 8. 2010 9:32)