dynamicke polozky formulare

martin28
Člen | 39
+
0
-

Ahoj, prosim o radu, jak udelam formular do ktereho zadavam pres js polozky?

<?php
final class ObjednavkaFormFactory
{
	public function create(): Form
	{
            $form = $this->factory->create();

            $form->addText('kde_jmeno', '');

			$form->onSuccess[] = function (\Nette\Application\UI\Form $form, \stdClass $values): void {
               var_dump($values);
            };

			return $form;
	}
}
?>

a pak pres JS pridavam polozky objednavky
<input type=‚nazev[]‘ value=‚aaa‘><input type=‚cena[]‘ value=‚cena_aaa‘>
<input type=‚nazev[]‘ value=‚bbb‘><input type=‚cena[]‘ value=‚cena_bbb‘>

jak ziskam prosim ve zpracovani hodnot tyto polozky objednavky?

zkousel jsem to pres snipety, ale tam jsem narazil na stejny problem a predevsim se nepovedlo rozchodit refresh jenom daneho bloku. co jeste musim udelat?

<?php
{snippet wholeList}
<ul n:snippet="itemsContainer">
	{foreach $list as $id => $item}
	<li n:snippet="item-$id">{$item}</li>
	{/foreach}
</ul>
{/snippet}
?>
<?php
public function handleAdd(): void
{
	$this->template->list = $this->getTheWholeList();
	$this->template->list[] = 'New one';
	$this->redrawControl('wholeList');
}
?>

Ten handleAdd se zavola pres ajax to je v pohode spise se neprekresli ten snippet?

Dekuji za rady

Editoval martin28 (26. 5. 2020 7:28)

Phalanx
Člen | 310
+
0
-

A nechceš spíš použít multiplier a ajaxem?
https://github.com/…s-multiplier

Editoval Phalanx (26. 5. 2020 8:16)

martin28
Člen | 39
+
0
-

Tak konecne jsem prisel na ty snippety a prekreslovani, samozrejme ze jsem si to v renderu prepisoval:-)

Jak tedy tedka na ty formulare a dynamicke prvky staci kdyz v tom handleru je vzdy nejak pridam do formulare?

Editoval martin28 (26. 5. 2020 9:35)

Phalanx
Člen | 310
+
+1
-

Navrhnul jsem ti to jen proto, protože jde o funkční řešení. Samozřejmě můžeš použít i to tvé.

  1. Dumpni $_POST místo $values, pokud dynamicky přidáváš políčka. Ve $values ty hodnoty nebudou.
  2. $this->template->list = $this->getTheWholeList(); tento kód patří do renderDefault (která se ti zavolá po ajaxu)