FormContainer nemá metodu addGroup – jak to řešit?
- Ot@s
- Backer | 476
Při práci s formuláři mám tento krátký kód:
$form = new Nette\Application\AppForm();
$container = $form->addContainer( 'tmp' );
$container->addGroup( 'Some group' ); // zpusobi Call to undefined method Nette\Forms\FormContainer::addGroup
$container->addText( 'Some text' );
Skript končí na třetím řádku hláškou: Call to undefined method Nette\Forms\FormContainer::addGroup (když ho zakomentuji, skript proběhne). Co s tím? Je to záměr? Jak mám dostat kontejner do fieldsetu? Díky za nasměrování.
PHP 5.3.1 + Nette 2.0-dev (tyden stare)
- Vojtěch Dobeš
- Gold Partner | 1316
fieldset
se dá určitě řešit ručním vykreslováním
(z hlediska přijetí dat nemá fieldset stejně žádný význam). A ruční
vykreslování se dá skvěle vylepšit formulářovými
makry.
- Ot@s
- Backer | 476
vojtech.dobes napsal(a):
fieldset
se dá určitě řešit ručním vykreslováním (z hlediska přijetí dat nemá fieldset stejně žádný význam). A ruční vykreslování se dá skvěle vylepšit formulářovými makry.
O ručním vykreslování samozřejmě vím. Potřebuju jiné řešení, neboť prvku formuláře jsou generovány dynamicky…
- Vojtěch Dobeš
- Gold Partner | 1316
No, a nešlo by to skloubit? Lze přeci iterovat přes prvky v containeru a podle jejich typu ci nazvu uz je vykreslit, jak bude potřeba. Nebo je tam nejaky zadrhel? Anebo stejně jako formulář generován podle nějakých dat (předpokládám), tak by také mělo být možné podle těchto stejných dat jej i ručně vykreslit.
- Ot@s
- Backer | 476
vojtech.dobes napsal(a):
No, a nešlo by to skloubit? Lze přeci iterovat přes prvky v containeru a podle jejich typu ci nazvu uz je vykreslit, jak bude potřeba. Nebo je tam nejaky zadrhel? Anebo stejně jako formulář generován podle nějakých dat (předpokládám), tak by také mělo být možné podle těchto stejných dat jej i ručně vykreslit.
Díky za tip. No, popravdě me nenapadá jak. Musel bys to asi trošku rozepsat.
Mám strom dynamickych atributů objektu, které chci ve formuláři podobným strukturovaných způsobem vykreslit (tj. kořen větve je container/fieldset s vnořenými prvky). Nakonec jsem to vyřešil tak, že si nasekám fieldsety přes addGroup přímo do formuláře. Následně generuju formulářové kontejnery s prvky a ty pomocí add metody formuláře umísťuju do příslušných grup. Není to úplně to, co bych si představoval, ale co nadělám…
Zarazilo mě, že form container má stejné možnosti (alespoň co se týče formulářových elementů), jako samotný form. Že form containeru chybí možnost addGroup, to jsem teda fakt nečekal…
- Filip Procházka
- Moderator | 4668
třeba takhle:
protected function createComponentForm($name)
{
$form = new Nette\Application\AppForm($this, $name);
$form->addGroup('Skupina');
$container = $form->addContainer('c');
$container->addText('name', 'Jmeno');
$form->addGroup('Skupina 2');
$form->addSubmit('s', 'Poslat');
}
nebo takle:
protected function createComponentForm($name)
{
$form = new Nette\Application\AppForm($this, $name);
$container = $form->addContainer('c');
$container->currentGroup = $form->addGroup('Skupina', FALSE);
$container->addText('name', 'Jmeno');
$form->addGroup('Skupina 2');
$form->addSubmit('s', 'Poslat');
}
a nebo nejsprávněji :)
Class MyContainer extends Nette\Forms\FormContainer
{
protected function attached($obj)
{
parent::attached($obj);
if (!$obj instanceof Nette\Forms\Form) { // kvůli lookups
return ;
}
$this->currentGroup = $this->getForm()->addGroup('Skupina', FALSE);
$this->addText('name', 'Jmeno');
}
}
// ... presenter
protected function createComponentForm($name)
{
$form = new Nette\Application\AppForm($this, $name);
$form['c'] = new MyContainer();
$form->addGroup('Skupina 2');
$form->addSubmit('s', 'Poslat');
}
Editoval HosipLan (17. 3. 2011 11:49)