Prezentace zpracovaných výsledků
- cuga
- Člen | 210
Odeslu soubor k zpracovani pres formular, natahnu a zpracuju data, ale dostavam se k problemu, jak tyto data prezentovat bez ulozeni do db.
Chci je zobrazit v novem sablone. Zkousel sem persistentni parametry, ale zajimave, ze pak nedoslo k presmerovani.
class Admin_PriceListsPresenter extends Admin_BasePresenter
{
/** @persistent array */
public $result = array();
definice formulare
...
zpracovani
$this->result = $res; // do res ukladam pole radku
$this->redirect('PriceLists:view');
Zajimave, ze kdyz $res ulozim do $this->result, tak vubec nedojde k presmerovani. Nevyhodi se zadna chyba, ale nedojde k zadne zmene stavu.
Vyuzivam dobre persistentni parametry? Jak ho nactu v PriceLists:view? Pres $this->getParam(‚result‘)?
- Ondřej Mirtes
- Člen | 1536
Pokud chceš zobrazit uživateli něco po přesměrování, slouží k tomu flashMessage.
- PetrP
- Člen | 587
FlashMessage slouží k zobrazování výsledků operací. Tedy například informace o úspěšném provedení nebo případně o chybě. Nepoužíval bych je k přechovávání složitých informací. K tomu bych použil třídy Nette\Cache nebo Nette\Web\Session (vázáno na aktuální sezení uživatele)
class Admin_PriceListsPresenter extends Admin_BasePresenter
{
public function handleSubmit()
{
// vytvorim si $res
Environment::getSession()->xlsRes = $res;
$this->redirect('PriceLists:view');
}
public function renderView()
{
if (!isset(Environment::getSession()->xlsRes)) throw new Exception;// nemam data
else
{
$res = Environment::getSession()->xlsRes;
//zpracovavam $res
if (/* nepotrebuju dal data */) unset(Environment::getSession()->xlsRes);
}
}
}
--\
Nebo v případe kdy potřebuju aby mohl uživatel mít zobrazeno několik různých dat v několika oknech.
class Admin_PriceListsPresenter extends Admin_BasePresenter
{
/** @persistent */
public $resultId;
function handleSubmit()
{
// vytvorim si $res
// $resultId = nejaky identifikator;
$this->resultId = $resultId;
Environment::getSession()->xlsRes[$resultId] = $res;
$this->redirect('PriceLists:view');
}
public function renderView()
{
$resultId = $this->resultId;
if (!isset(Environment::getSession()->xlsRes[$resultId])) x;// nemam data
else
{
$res = Environment::getSession()->xlsRes[$resultId];
//zpracovavam $res
if (/* nepotrebuju dal data */)
{
unset(Environment::getSession()->xlsRes[$resultId]);
$this->resultId = NULL;
}
}
}
}
Jestli s nima potřebuješ pracovat nezávisle na jednom jediném sezení tak bude lepší Cache.
Environment::getCache()->xlsRes
// dále se s ní pracuje stejně
Tahle je jen nástřel, je potřeba to doladit, a session např umístit do nějakého namespacu atd.
Editoval PetrP (14. 5. 2009 18:24)