formulář, proměnný počet polí? jak na ně

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

Ahoj, řeším problém,kdy potřebuji do pormuláře vykreslovat proměnný počet polí,

jednou budou 2, jednou jich bude 5.

jak je do formuláře přidat a potom je rozumě číst.

Dekuji :-)

Oli
Člen | 1215
+
+1
-

Pouzij na to kdyby\replicator (addDynamic).

Ps. Nechce se mi na mobilu delat odkaz. Je to v planette

malkol
Člen | 133
+
0
-

dobře pročetl jsem si to, a asi jsem pochopil jak to funguje …ale ihned po tom co jsem to začal zkoušet jsem zadrhnul …

pro mě jakožto začátečníka je to celkem neprůhledné … vím jen že Kdyby\Replicator\Container neni v cash bootloaderu … což si myslím že by být měl, …

jel jsem podle návodu a zasekl jsem se ihned u řádky
kam má ta řádka přijít? a neměl bych tu třídu nejdríve videt v cash toho loaderu ? :-)

Kdyby\Replicator\Container::register();

předpokladam, že hlásí že nezná tuhle funkci je potom pochopitelné

Nette\Application\UI\Form::addDynamic().
Oli
Člen | 1215
+
0
-

Je potřeba to nainstalovat pomocí composeru (možná promazat cache). Potom vložit ten řádek Kdyby\Replicator\Container::register(); třeba do bootstrap souboru. Pak už jen ve třídě, kde je formulář zavolat tohle:

use Nette\Forms\Container;

$form->addDynamic('dates', function (Container $container) {
        $container->addText('date');
});

Pokud to bude fungovat, je vše v pořádku. Pokud ne, někde je chyba.

PS. díky tomu řádku s register() se to přidá do DI a je to napojený na aplikaci.

malkol
Člen | 133
+
0
-

výborně .. to se mi podařilo … a jak dostanu prosím pěkně nějakou proměnnou dovnitř
napříkald ten $mujText ?

jediná teorie která mě napadá je napsat Container ?
nebo ?

$dyn= $formPoznamka->addDynamic('dates', function (Container $container) {
                            $container->addTextArea('text',$mujText);
                    });

EDIT: samozřejmě .. jak jinak

$users = $form->addDynamic('users', function (Container $user) use ($removeEvent) {
        // ...
        $user->addSubmit('remove', 'Remove')
            ->setValidationScope(FALSE) # disables validation
            ->onClick[] = $removeEvent;
    }, 1);

Editoval malkol (8. 11. 2014 21:53)

malkol
Člen | 133
+
0
-

dobrá .. ale takhle dostanu ty proměnné do toho Dynamic …

$dyn= $formPoznamka->addDynamic('dates', function (Container $container)  use ($mujText,$id){
                           $container->addTextArea('text',$mujText);
                           $container->addTextArea('id',$id);
                   });

ale co když chci každou jednotlivou kompomentu v té Dynamic vytovrit s jinými parametry ?

pravděpodobně by bylo dobré kdyby to nejak vstupovalo do …

$dyn->createOne();
BigCharlie
Člen | 283
+
0
-

úplně nerozumím, na co se ptáš. Předpokládám, že chceš do té své textarey dostat obsah nějaké proměnné? Pak nějak takhle:

	public function createComponentMujForm() {
		$form = ...
		...
		$form->addDynamic('notes', function (Container $container) {
			$container->addTextArea('note',$mujText);
})
		...
	}

	public function renderDefault() { // podle toho, jak se jmenuje příslušné view
		...
		if (!$this['mujForm']->isSubmitted()) {
			foreach ($myDatabaseNotes as $note) { // jména polí si uprav podle reality
				$this['mujForm-notes'][$note->id]->setValues([
					'note' => $note->content,
				]);
			}
		}
		...
	}

Doufám, že tam není nějaká bota, píšu to z hlavy.

malkol
Člen | 133
+
0
-

jo .. to zni dobře .. kouknu na to a kdyztak se ozvu;) .. díky moc

malkol
Člen | 133
+
0
-

funguje to pěkně … ale jak říkám .. je to strašně neprůhledné, a dokumentace k tomu nikde pořádně není … tak se to blbě pochopuje ;)

ještě otázečku .. jak bych se dostal ne k hodnotám těch polí … ale k těm labelům které je uvozují z toho renderu ?

k tomu co se nastavuje jako druhý parametr

$container->addTextArea(‚text‘,„popisek“);

malkol
Člen | 133
+
0
-

jde to tedy ?