Dynamický formulář – zpracování
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- MikeLacroix
- Člen | 60
Zdravím, nastíním svůj problém:
Šablona
Po kliknutí na odkaz se vygeneruje dynamický formulář a pomocí ajaxu se
zobrazí na stránce.
<div n:foreach="$products as $product">
...
<a n:href="displayCartForm! $product->id" class="ajax">Vložit do košíku</a>
</div>
{snippet cartForm}
<div n:ifset="$openModal">
...
{control cartForm}
...
</div>
{/snippet}
Presenter
...
private $product;
...
public function handleDisplayCartForm(int $product) {
$this->product = $this->products->getById($product);
$this->template->openModal = true;
$this->redrawControl('cartForm');
}
protected function createComponentCartForm() {
return $this->cartFormFactory->create($this->product);
}
CartFormFactory
...
public function create(Product $product) {
...
foreach ($product->parameters as $parameter) {
$form->addRadioList($parameter->id, $parameter->name, $parameter->variants);
}
...
}
Tohle funguje obstojně a formulář se správně vygeneruje. Problém je při zpracování formuláře. Jednoduše nevím, jak při zpracovávání formuláře zjistit, pro který produkt by se měl formulář vytvářet.
Obecně mi přijde, že na to nejdu moc čistě. Budu vděčný za jakoukoliv radu…
- CZechBoY
- Člen | 3608
Udělej to přes Multiplier.
<div n:foreach="$products as $product">
...
{control cartForm-$product->id}
</div>
protected function createComponentCartForm() {
return new UI\Multiplier(function ($productID) {
$product = $this->model->getProductById($productID);
return $this->cartFormFactory->create($product);
});
}