Návrat na výsledky hledání
- kolaloka
- Člen | 69
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
- ten dotaz na databázi bys měl mít v nějaké modelové vrstvě, ne přímo v komponentě
- 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
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;
}
?>
- Ondřej Kubíček
- Člen | 494
$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, ...];
}