Prezentace zpracovaných výsledků

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

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
+
0
-

Pokud chceš zobrazit uživateli něco po přesměrování, slouží k tomu flashMessage.

cuga
Člen | 210
+
0
-

to vim, ale ja potrebuju po zpracovani vypsat v rozumne forme co bylo zpracovano.

presneji zpracovavam xls soubor, takze bych rad po zpracovani v nove sablone vypsal co se zpracovalo, rozumnej tabulku s nactenymi daty.

Editoval cuga (3. 5. 2009 22:01)

cuga
Člen | 210
+
0
-

nakonec si mel vlastne recht :)

sice mi to prijde takove nedokonale vzhledem k tomu, ze po obnoveni stranky o vysledek prijdu, ale jako provizorni reseni dobre :)

PetrP
Člen | 587
+
0
-

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)