Po odeslání formuláře otevřít nové okno (tisk)

MW
Člen | 615
+
0
-

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 | 762
+
0
-

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…

MW
Člen | 615
+
0
-

Mezitím, ale asi musím mit nějakou action ne? Potřebuji nějak vzít Od a Do, načíst data z databáze a poslat do šablony… Nebo si ty data načíst takké tady?

Díky moooc!

Kamil Valenta
Člen | 762
+
+1
-
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 | 762
+
0
-

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…

MW
Člen | 615
+
0
-

Díky moc !