Po odeslání formuláře otevřít nové okno (tisk)
- MW
- Člen | 626
Ahoj, předem se omlouvám, po letech upravuji projekt a prosím o radu :)
Mám komponentu DateForm, kterou volám v presenteru:
protected function createComponentDateForm(): Form
{
return $this->dateFormFactory->create(function (): void {
$this->flashMessage("Test");
$this->redirect('Sestavy:');
});
}
Tam je něco takového:
public function create(callable $onSuccess): Form
{
$form = $this->factory->create();
$form->addText('datumod', 'Od:')
->setType('date')
->setRequired("Zadejte datum Od");
$form->addText('datumdo', 'Do:')
->setType('date')
->setRequired("Zadejte datum Do");
$form->addSubmit('send', 'Odeslat');
$form->onSuccess[] = function (Form $form, \stdClass $values) use ($onSuccess): void {
$onSuccess();
};
return $form;
}
ted potřebuji, asi v presenteru, udělat nějakou action, kde si připravím data na základě hodnot z formuláře a pošlu je do nějaké custom šablony pro tisk a otevřu v novém okně.
Prosím, kam to nejlépe dát? action v presenteru a pak přes setview nebo to nějak dát sem:
$form->onSuccess[] = function (Form $form, \stdClass $values) use ($onSuccess): void {
či by to šlo nějak elegantněji?
Moc díky!
- Kamil Valenta
- Člen | 822
V $onSuccess si předáváš anonymní funkci
function (): void {
$this->flashMessage("Test");
$this->redirect('Sestavy:');
}
to je správná cesta, protože je formulář univerzální. V Sestavy:default si vykrelis JS na otevření nového okna, např. Sestavy:print, v print.latte bude samotná sestava a třeba vyvolání dialogu tiskárny…
- Kamil Valenta
- Člen | 822
protected function createComponentDateForm(): Form
{
return $this->dateFormFactory->create(function ($datumod, $datumdo): void {
$this->flashMessage("Test");
$this->redirect('Sestavy:', ['datumod' => $datumod, 'datumdo' => $datumdo]);
});
}
$form->onSuccess[] = function (Form $form, \stdClass $values) use ($onSuccess): void {
$onSuccess($values->datumod, $values->datumdo);
};
- Kamil Valenta
- Člen | 822
Pokud je to možné, tak už bych rovnou to zpracování formuláře
otevíral v novém tabu. Aby ses s těmi parametry nemusel tahat mezi
Sestavy:default a Sestavy:tisk (nebo print nebo jakákoliv jiná render
metoda).
Ale pokud musíš / chceš dostát původnímu zadání, tak to musíš takto
dvakrát předat. Handle formuláře to redirectne na první render, který
otevře nové okno a v něm tiskovou URL zase s předanými parametry…