renderování jedné konkrétní groupi

- loov
 - Člen | 49
 
Čus neťáci,
formulář se mi vytváří v komponentě, ve kterém mám několik skupin
($form->addGroup();). Každá skupina má svůj název, a
v šabloně je potřebuji vypsat. Jelikož mám ale s každou skupinou své
záměry, co se týče nastylování (např.: jedna skupina bude uzavřena ve
fieldsetu druhá v divu atp.), tak potřebuji vyrenderovat každou skupinu
jednotlivě. Prosím tedy o radu díky… :-)

- arron
 - Člen | 464
 
Pokud pouzivas ConventionalRenderer, tak se u grup da nastavit
pomoci setOption() jednak container,
label a description (daji se tomu ev. predhodit
i instance Html tridy). Takze by to pak mohlo vypadat treba takto:
	$group = $form->addGroup('Skupina1');
	$group->setOption('container', 'fieldset'); //$group->setOption('container', Html::el('fieldset'));
Pokud ConventionalRenderer nepouzivas, tak si to stejne
vyrenderujes sam jak potrebujes:-)
Editoval arron (21. 10. 2010 17:06)

- loov
 - Člen | 49
 
Moc díky za help arrone, jsem ale ještě nette začátečník a jediné co vidím je, že
<?php
$group->setOption('container', 'fieldset');
?>
nastaví string(fieldset) pod klíč container. A navíc když chci nějakou skupinu vypsat můžu akorád vypsat tohle
{
„controls“ protected ⇒ SplObjectStorage(0)
„options“ private ⇒ array(3) ▼ {
„label“ ⇒ „nazevTema“ (9)
„visual“ ⇒ TRUE
„container“ ⇒ „fieldset“ (8)
 }
}
Jinak groupu přídávám standartním způsobem
<?php
$group = $form->addGroup('nazevTema');
$form->addText('nazev', 'Název')
	->addRule(NForm::FILLED);
$form->addText('tema', 'Téma')
	->addRule(NForm::FILLED);
$group->setOption('container', 'fieldset');
?>
Jinak já ConventionalRenderer nepoužívám, normálně
šablonuju. Ještě by se možná hodilo zmínit, že funguji na Nette
2. Jak jsem již zmiňoval jsem v tomhle nový, tak prosím
o podrobnější nakopnutí. Díky :-)
Editoval loov (21. 10. 2010 22:49)

- Vojtěch Dobeš
 - Gold Partner | 1316
 
To nastavení container na fieldset způsobí, že
se daná group vypíše jako element fieldset. Pokud
bys zadal třeba div, tak se to vypíše jak div.
Stejně tak label je ve výchozím nastavení legend.
Místo obyčejného řetězce lze ale zadat i instance pomocné třídy Html
(Nette\Web\Html). Volá se takto:
$myContainer = Html::el('div');
$myContainer->class[] = 'moje-css-trida';
$myContainer->style['color'] = 'blue';
A pak:
$group->setOption('container', $myContainer);
Pokud vypisuješ formulář automaticky (pomocí
ConventionalRenderer, jak psal výše arron, volání
{control myForm}), tak se tohle použije a vypíše jak
div se třídou moje-css-trida a atributem
style s obsahem color: blue;.
Druhou možností (mírně zdlouhavější, ale mnohem svobodnější) je
vykreslovat formulář ručně (vhodným pomocníkem mohou být formulářová
makra od Honzy Marka). Pak asi nemá smysl používat addGroup a přímo
v šabloně si můžeš jednotlivé prvky formuláře dávat do
divů, fieldsetů a všeho možného zcela dle
libosti.
Doufám že je to k problému, co řešíš:)