Nepřemazávající se GET parametry

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
exquis
Člen | 83
+
0
-

Ahoj,

dělám vyhledávání mezi realitními nabídkami a řeším problém s vyhledáváním.

Mám vyhledávací formulář:

	/** @persistent */
public $page;

/** @persistent */
public $type;

/** @persistent */
public $cities = array();

/** @persistent */
public $disposition = array();

public function renderNabidka() {
    $seznam = $this->Nemovitosti->findNemovitosti($this->type, $this->cities, $this->disposition);
    if ($this->getUser()->isLoggedIn()) {
        $this->template->nemovitosti = $seznam;
    } else {
        $this->template->nemovitosti = $seznam->limit(2);
    }
}
function createComponentSearchForm() {
       $form = new Form();
       $form->setMethod("GET");
       $form->addSelect("t", "Typ", $this->Nemovitosti->getEstateType()->fetchPairs("id", "name"))->setValue(5);
       $form->addMultiSelect("c", "Město", $this->Nemovitosti->getCities()->fetchPairs("id", "name"));
       $form->addMultiSelect("d", "Dispozice", $this->Nemovitosti->getDispositions()->fetchPairs("id", "name"));
       $form->addButton("save")->setOmitted();
       $form->onSubmit[] = array($this, "handleSearch");
       return $form;
   }

V tomto formuláři by si uživatel měl navolit města, případně další parametry. Mezi nabídkami je možno listovat. Zároveň je požadavek, aby se parametry ukládaly do URL, aby bylo možné odkazovat na konkrétní stranu zasláním odkazu.

Vše funguje pouze při prvním vyhledávání. Jakmile použiji vyhledávání poprvé, tak se vše zapíše do URL jak má. Routa vše zpracuje a programově vyfiltruji inzeráty. Jakmile provedu druhé hledání, tak se parametry z druhého hledání „přičtou“ k parametrům z prvního hledání, namísto toho, aby je nahradili.
Pokud to tedy vypadá následovně:

1. hledání

TYP: Byt
MESTO: Pardubice

vyhledava: typ → byt, mesto → pardubice

2. Hledani

TYP: pozemek
MESTO: Praha

vyhledava: typ → byt, pozemek, mesto → pardubice, praha

Problém je zjevný… zároveň se mi ani nedaří nastavit defaultní parametry formuláře, aby po přechodu na jinou stránku zůstaly zobrazeny aktuálně filtrované parametry. I když zadám přímo setValue() s konkrétním ID (kdyby se náhodou nepřenášela data), tak hodnotu nepředvyplní.

První problém jsem zkoušel řešit pomocí persistentních parametrů, abych je nemusel na každé stránce obnovovat, ale nedaří se..

exquis
Člen | 83
+
0
-

Tak defaultní hodnoty nejdou nastavit jen ve chvíli, kdy je action formuláře na GET, když ji nastavím na POST, tak nastavit jdou.

Lukeluha
Člen | 130
+
0
-

Co odesílat formulář klasicky postem a v handleSearch zpracovat hodnoty a ty poté přiřadit do jednotlivých persistentních parametrů?

Kdybys to chtěl nějak udělat pomocí getu, tak jména tvých formulářových polí se jmenují jinak než tvé persistentní proměnné, v tom případě se „nepropojí“.