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