Jak řešíte situace s persistentními parametry v komponentě při procházení stránek bez dané komponenty

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

Jak například řešíte situaci, kdy máte klasicky výpiš položek v datagridu na první stránce, editační formulář na druhé, a po editaci se chcete vrátit v datagridu na stejné místo, kde jste byli (stránka filtr atd)? Uložení state do session nepřipadá v úvahu z důvodu, že když uživatel klikne například do levého menu aby se dostal na zmíněnou první stránku, výpis musí být „resetovaný“ na výchozí stav. Čili mi jde v podstatě o to, jak efektivně přenášet v url libovolné persistentní argumenty bez instance komponenty, která je jako persistentní definuje.

Doufám, že je to sprozumitelné.

Pro představu můj nápad:

// Vytáhneme persistentní parametry komponenty
$persistent_args = $form->presenter->getPersistentArgsFromRequest('\DataGrid\DataGrid', $self->persistent_args_prefix);
    /**
     * Vytvoří pole persistentních parametrů z requestu
     * @param String $class celý absolutní název třídy včetně namespace
     * @param String/Null $prefix prefix před klíči
     * @return Array
     */
    public function getPersistentArgsFromRequest($class, $prefix = null)
        {
        if(!is_string($prefix))
            $prefix = lcfirst(substr($class, 1 + strrpos($class, '\\')));
        $persistent_params = array_map(function($val) use($prefix) { return (empty($prefix) ? '' : $prefix.'-').$val; }, $class::getPersistentParams());
        $result = Array();
        foreach($this->request->params as $key => $val)
            {
            if(in_array($key, $persistent_params))
                $result[$key] = $val;
            }
        return $result;
        }

Edit: teď mě napadlo, možná zkusím experimentovat a pro daný problém použít backlink…

Editoval Ascaria (14. 5. 2012 12:26)

llsm
Člen | 121
+
0
-

Take dalsi moznost muze byt si trochu pohrat v datagridu s jeho funkcemi saveState() a restoreState(). Backlinky jsou take moznost, ale pokud mas nejakou starsi verzi nette, tak ti nebudou fungovat flash zpravicky po restoreRequest(), nette 2.0 uz by tim trpet nemelo.