„Dynamicky“ pocet prvku ve formulari
- testerict
- Člen | 3
Dobry den, uz par dnu se potykam s timto problemem:
Chci udelat editaci textu, ktere si nactu z databaze. Vytvorim si proto formular a v nem zjistim pocet polozek a v cyklu pridavam prvek textarea do formulare.
Tyto prvky bezproblemu vykreslim i s textem nactenym z databaze.
Ovsem kliknutim na tlacitko Ulozit zmeny tj. pri zpracovani tohoto pozadavku nejsou tyto prvky* dostupne (*ty ktere jsem v cyklu pridal do $form). V POSTu jsou ovsem viditelne.
Jak to delam:
<?php
protected function createComponentEditOPForm()
{
$op = $this->context->createOp()->get($this->opid);
$form = new Form();
$form->addText('cislo_verze', 'Verze OP:', 20, 30)
->addRule(Form::FILLED, 'Je nutné zadat verzi obchodních podmínek.');
$form->addHidden('opid')->setDefaultValue($op->id);
$form->setDefaults(array(
'cislo_verze' => $op->cislo_verze
));
$optexts = $this->context->createTextop()->where('id_op', $this->opid);
$wrapper = $form->addContainer('textsop');
$i = 0;
foreach ($optexts as $optext) {
$container = $wrapper->addContainer($i);
$container->addTextArea('optext', ($i+1).'. odstavec:')->setDefaultValue($optext['text']);
$container->addHidden('idtext')->setDefaultValue($optext['id']);
$i++;
}
$form->addSubmit('ulozitZmeny', 'Uložit změny');
$form->onSuccess[] = callback($this, 'ulozitZmenySubmitted');
return $form;
}
?>
Potom se pokousim o zpracovani:
<?php
public function ulozitZmenySubmitted(Form $form)
{
$values = $form->getValues();
//zde ve $values je kontejner 'textsop' prazdny.
//.... atd.
}
?>
Umel by mi nekdo poradit? Kde delam chybu a co vsechno mam spatne?
Dekuji
- Filip Procházka
- Moderator | 4668
Vidím dva zásadní problémy
- snažíš se nějakou magii dělit text na odstavce – použij raději wysiwyg, nebo něco lepšího
- nepoužil jsi můj replicator
- testerict
- Člen | 3
Mohl bych poprosit o ukazku jak pouzit ten replicator. V mem pripade potrebuju pri vytvareni komponenty toho formulare tak dat x krat textarea spolu s text inputem (tak jak je to v prechozim kodu)?
Asi jsem trochu mimo, nevim jak to udelat. Diky
Editoval testerict (2. 10. 2012 16:22)
- Filip Procházka
- Moderator | 4668
$form->addDynamic('text', function ($container) {
$container->addTextArea('paragraph', 'Odstavec');
});
Zbytek se pokus vyčíst z dokumentace, pokud se nebude dařit, klidně se ptej dál ;)