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
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)