Akce v komponentě – samostatná šablona+zpracování formuláře
- David Klouček
- Člen | 57
Ahoj, potřeboval bych poradit, nejspíš špatně používám komponenty. Mám presenter ProductDetail a akci View, ve které se používá několik komponent a mimo jiné i ParamsControl.
class ProductDetail extends BasePresenter {
public function renderView() {}
protected function createComponentParams() {
$cmp = new ParamsControl();
return $cmp;
}
}
class ParamsControl extends \Nette\Application\UI\Control {
public function renderMain() {
$this->getTemplate()->setFile(__DIR__.'/main.latte');
$this->getTemplate()->render();
}
public function renderOther() {
$this->getTemplate()->setFile(__DIR__.'/other.latte');
$this->getTemplate()->render();
}
}
Vykresluje se na 2 místech v šabloně viz části Main a Other. Dále potřebuju akci, co bude odpovídat JSONem:
public function handleGiveMeData() {
$this->getPresenter()->sendJson([/*..*/]);
}
To už je nejspíše špatně, protože signál má udělat nějakou změnu a
nevracet odpověď, ale každopádně to funguje.
A teď k problému: Potřebuju udělat podobnou metodu,
která bude vracet jako odpověď vlastní šablonu (konkrétně pro modální
okno) s formulářem:
protected function createComponentCreateParamForm() {
$form = new Form();
$form->setAction($this->link('CreateParam!'));
$form->onSubmit[] = [$this, 'createParamFormSubmitted'];
return $form;
}
public function handleCreateParam()
{
$this->getTemplate()->setFile(__DIR__.'/createParam.latte');
$this->getTemplate()->render();
$this->getPresenter()->terminate();
}
Jenže signál se vyvolává pomocí proměnné „do“ v URL a továrnička pro zpracování formuláře rovněž potřebuje „do“, takže se formulář nezpracuje. Nevíte jak toto řešit? Nestačí mi komponentu vykreslit na jednom nebo více místech, ale potřebuju aby mohla mít akce jako presenter.
Editoval David Klouček (25. 10. 2017 21:21)
- David Klouček
- Člen | 57
CZechBoY napsal(a):
Nemuzes to modalni okno vykreslit a v javascriptu ho jen zobrazit pri odeslani formulare?
Mě zajímá, jak se to řeší, ne obchází.