renderování jedné konkrétní groupi

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

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

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

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

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šíš:)