Návrat na výsledky hledání

kolaloka
Člen | 69
+
0
-

Prosím pomozte mi nastavit návrat na vyhledávání.

Mám advanced search s mnoha hodnotami, který se zpracuje a vyplivne seznam výsledků.
Když v seznamu výsledků rozkliknu jeden výsledek, není se jak vrátit zpět.
Vyčetl jsem, že si mohu výsledek zapsat do Session. Ale nedokážu si představit jak konkrétně to zapsat a kam.

Můj kód vypadá takhle:

Presenter:

<?php
	protected function createComponentAdvancedSearchForm() {
		$form = new Form;
		$form->addText('firstname', 'Křestní jméno:');
		$form->addText('surname', 'Příjmení:');
		$form->addText('surnames', 'Příjmení (jiné tvary):');
		...
		$form->addText('startPyear', 'Rok profese mezi rokem:');
		$form->addText('endPyear', 'a rokem:');
		$form->addSubmit('send', 'Hledat');
		$form->onSuccess[] = [$this, 'AdvancedSearchFormSucceeded'];
		return $form;
	}

	public function advancedSearchFormSucceeded($form, $values) {
		if (isset($values->firstname)) {
			$firstname = $values->firstname;
		} else {
			$firstname = "";
		}
		if (isset($values->surname)) {
			$surname = $values->surname;
....
		if (($values->startDday>0) && ($values->endDday> 0)) {
			$startDday = $values->startDday;
			$endDday = $values->endDday;
		} else {
			$startDday= "-1";
			$endDday = "32";
		}
		$this->template->klient = $this->database->table('nekrolog')
			->where('firstname LIKE ?', '%' . $firstname . '%')
			->where('surname LIKE ?', '%' . $surname . '%')
			->where('surnames LIKE ?', '%' . $surnames . '%')
...
			->where('dday>= ? AND dday<= ?', $startDday, $endDday)
			->order('id DESC');
		return $this->template->klient;
	}

	public
		function renderAdvanced($search) {
		$this->template->loginstatus = $this->logInCheck();
                                $this->template->search = $search;
	}
?>

výsledek se rendruje takhle:

<?php
	{foreach $klient as $post}
			<div class="prispevek">
				<tr><td>{$post->dday}.{$post->dmonth}.{$post->dyear} {$post->dplace}
					<a n:href="Klient:show $post->id"><b>{$post->title} {$post->firstname} {$post->surname}</b></a>
				</td></tr>
			</div>
		{/foreach}
?>

A jednotlivý rozklik přes Klient:show vyplivne:

<?php
<table>
	    <tr><td><td><b>{$klient->surname} {$klient->surnames} {$klient->firstname} </b></td></tr>
</table>
<a href = "javascript:history.back()">Back to previous page</a>
?>

No a tady přes to „back to…“ se bohužel k výsledku bez reloadu stránky nevrátím… :-(

Help, kdo mi pomůůůžeeeee?

Ondřej Kubíček
Člen | 494
+
+1
-
  1. ten dotaz na databázi bys měl mít v nějaké modelové vrstvě, ne přímo v komponentě
  2. jak se pracuje se sessionama v nette najdeš tady https://doc.nette.org/…ttp/sessions, uloží si tam ty věci z filtru $fisrtname atd… a zkontroluješ jestli máš v session ten filtr, a použiješ hodnoty z něj, né z inputu
kolaloka
Člen | 69
+
0
-

Děkuju za rychlou odpověď,
nicméně pořád mi není jasné, jak načtu do session ten výsledek z postu? Ve které chvíli? Patřilo by to sem takhle?

<?php
    public
        function renderAdvanced($search) {
        $this->template->loginstatus = $this->logInCheck();
        $this->template->search = $search;
        $session->start()
        $section->vysledek = $search;
    }
?>
CZechBoY
Člen | 3608
+
+1
-

Ve chvili kdy se odesle a zvaliduje formular – udalost onSuccess.
Pokud se formular zrovna neodesila tak nastavis vychozi hodnoty formulare ze session – setDefaults(session->form)

Ondřej Kubíček
Člen | 494
+
+1
-

$session->start() tam nemusíš mít, startuje to samo, díval ses na tu dokumentaci?

tak do session to uložíš tam kde zpracováváš ten form, tudíž v té tvojí advancedSearchFormSucceeded

public function advancedSearchFormSucceeded($form, $values)
{
	$session->filter = ['username' => $values->username, ...];
}
kolaloka
Člen | 69
+
0
-

Díky kluci, tohle už snad chápu i já. Díky moc za vysvětlení, jdu to zkusit.