dynamické přidání libovolného počtu html elementu do formuláře

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

Ahoj snažil jsem se brouzdat po foru, jestli tu už někdo neřeší podobný problém, ale nepodařilo se mi řešení nalézt. Jestli to tu už řešené je, prosím napiště mi sem odkaz. Řeším problém, kdy si potřebuji na zakliknutí tlačítka přidat html element.

Formulář volám pomocí widgetu

{widget formZadaniMaturitniPrace}

který mě zavolá fci v presenteru

<?php

        public function createComponentFormZadaniMaturitniPrace()
        {
                $cmp =  new formZadaniMaturitniPrace();

                $cmp->defaults['input'] = "";

                $cmp->settings['cislo'] = 1;

                $cmp->saveData = array($this, 'formZadaniMaturitniPraceSaveData');

                $cmp->onOkClick[] = callback($this, 'formZadaniMaturitniPraceOkClick');

                $cmp->onCancelClick[] = callback($this, 'formZadaniMaturitniPraceCancelClick');

                return $cmp;
        }

?>

a tady je uz samotna formularova komponenta

<?php

public function createComponentFormZadaniMaturitniPrace($name)
        {
                $form = new NAppForm($this, $name);

                $form->addText('nazev', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

                $form->addText('tema', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

		$form->addTextArea('prostredky', 'téma práce')
			->addRule(NForm::FILLED, 'Políčko Téma nesmí být prázdné');

		$form->addSelect('predmety', $label = NULL, $this->predmet)
			->addRule(NForm::FILLED, 'Políčko Téma nesmí být prázdné');

                $form->addText('1cil', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

                $form->addText('2cil', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

                $form->addText('3cil', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

                $form->addText('1osnova', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

                $form->addText('2osnova', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

                $form->addText('3osnova', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

                $form->addText('resitele', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

                $form->addText('klicovaSlova', 'popisek inputu')
                        ->addRule(NForm::MAX_LENGTH, 'Maximální délka smí být %d znaků', 8)
                        ->addRule(~NForm::NUMERIC, 'Čísla se neuznávají');

		$form->addCheckbox('vhodnost1');

                $form->addCheckbox('vhodnost2');

                $form->addCheckbox('vhodnost3');

                $form->addCheckbox('vhodnost4');
                // dulezite je odesilaci tlacitko
                $form->addSubmit('ok', 'OK')
                        ->onClick = $this->onOkClick;

                return $form;
        }

?>

tady je pak sablona daneho formulare

{control $form begin}
{control $form errors}

<p> Název {$form['nazev']->control}</p>
<p> Téma {$form['tema']->control}</p>
<fieldset>
	<legend>Cíle práce</legend>
	<p>{$form['1cil']->control}</p>
	<p>{$form['2cil']->control}</p>
	<p>{$form['3cil']->control}</p>
</fieldset>

<fieldset>
	<legend>Osnova práce</legend>
	<p>{$form['1osnova']->control}</p>
	<p>{$form['2osnova']->control}</p>
	<p>{$form['3osnova']->control}</p>
</fieldset>

<p> Potřebné prostředky {$form['prostredky']->control}</p>

<p> Počet řešitelů {$form['resitele']->control}</p>

<p> Předmět {$form['predmety']->control}</p>

<fieldset>
	<legend>Práce je vhodná jako</legend>
	<p>{$form['vhodnost1']->control}DMP Technické lyceum</p>
	<p>{$form['vhodnost2']->control}DMP Informační technologie</p>
	<p>{$form['vhodnost3']->control}DRP Technické lyceum</p>
	<p>{$form['vhodnost4']->control}AP VOŠ</p>
</fieldset>

<p>Klíčová slova (jednotlivé pojmy oddělte středníkem){$form['klicovaSlova']->control}</p>

<p>{$form['ok']->control} {$form['cancel']->control}<p>

{control $form end}

Tímto bych chtěl nastínit mé dosavadní vykreslení formuláře. Vím jak bych přidal html element skrze jQuery (fce append). Jenže nevím jak si s tím dále pak má poradit nette, tak aby sebralo všchechna data z formuláře. I ta data, které jsou přidaná dodatečně. Takže prosím o radu.

Lawondyss
Člen | 106
+
0
-

V brzké době budu řešit podobný problém. Přidávání položek na seznam. Zatím jsem k tomu nedospěl, takže prakticky nevím, ale napadlo mě, že první políčko vykreslení Nette a ty další jQuery.

<?php
public function createComponentForm($name)
{
	$form = new AppForm($this, $name);
	$form->addText('items[]', 'Položka');
	$form->addSubmit('save', 'Uložit');

	$form->onSubmit[] = array($this, 'submittedForm');

	return $form;
}

public function submittedForm(AppForm $form)
{
	$values = $form->getValues();

	foreach($values['items'] as $i=>$item)
	{
		...
	}
}
?>

Pokud by měl ale někdo lepší nápad nebo nějaké zkušenosti, rád si ho vyslechnu.

Editoval Lawondyss (25. 11. 2010 13:02)

Foowie
Člen | 269
+
0
-

DynamicFormContainer

Jinak v Nette 2 (v nových formulářích) by mělo něco podobného být součástí distribuce.