Hledání + stránkování + komponenta oblíbená = 2 * do
- Tomáš Votruba
- Moderator | 1114
Jak byste řešili následující? V podstatě potřebuji provést v 1 url handle v presenteru i handle v komponentě.
- Vyhledání výsledků + stránkování vyžaduje přenášení submitu, proto používám „persistentní“ handle (?do), které toto umožňuje. To je ještě ok.
- U každého výsledku mám komponentu
{control favour $id}
k přidání záznamu mezi oblíbené. Tu nastává problém, jelikož využívá druhé handle, které přepisuje první, tedy maže výsledky.
Napadá mne 1. ukládat nějako do session, ale nevím, jestli je to vhodné.
Edit: Tak už jsem to vyřešil pomocnou funkcí, kterou volám po provedení handle komponenty. Nicméně i tak by mne zajímalo, jak na to čistě a jednoduše.
Editoval Schmutzka (12. 6. 2012 21:02)
- Filip Procházka
- Moderator | 4668
Čistě a jednoduše bych se nespoléhal na handle, ten signalizuje pouze to, že se změnily parametry. Tedy mít nějaké parametry v url (persistentní v komponentě/presenteru) a číst ty. Handle se má volat vždy pouze jednou – když měníš stav presenteru. Né pokaždé!
- Tharos
- Člen | 1030
Tak tak, parametr do
by neměl být součástí popisu stavu
aplikace. Doporučuji po každém signálu uživatele přesměrovat na
stránku bez parametru do
v URL podobně, jako se přesměrovává
v patternu Post-Redirect-Get u formulářů. Pak Ti potřeba
„vícenásobného do
“ přirozeně úplně odpadne.
- Tomáš Votruba
- Moderator | 1114
Díky oběma za podněty. Přes persistentní parametry jsem to měl původně, ale nepodařilo se mi použít VisualPaginator tak, aby mi je zachoval. Navíc mi nepřijde dobré mít url 300 znaků dlouhou.
Handle by se tedy nikde v url nemělo viset, jestli tomu rozumím.
@Tharos: Jestli to chápu dobře, tak např. takto změním stránkování?
/** @persistent array */
public $searchValues;
/** @persistent int */
public $from;
public function handleChangePage($searchValues, $from = 0)
{
// změním stránkování ...
$this->redirect("this", array(
"from" => $from,
"searchValues" => $searchValues // pole s parametry hledání
));
}