Předgenerování šablony pro presenter

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

Mám jednu latte šablonu, pro kterou se poměrně komplikovaně dávají dohromady data. Nazvěme ji třeba sablona.latte. V aplikaci je potřeba jí vykreslit na více místech i jí pak např. poslat e-mailem.

Rád bych měl extra metodu, která tuto šablonu připraví a vrátí. To bych chtěl pak použít např. v metodě renderNeco() v presenteru.

Zjednodušený kód:

public function pripravSablonu() {
	$template = $this->createTemplate()->setFile('sablona.latte');
	$template->registerFilter(new Nette\Latte\Engine);

	return $template;
}

public function renderNeco() {
	$this->setLayout(null);
	//??? Tady bych potreboval pouzit a vykreslit predprivaneou sablonu
	//$this->template->setFile($this->pripravSablonu()); ???
	//$this->template->setSource($this->pripravSablonu()); ???
}

Nevím, jak metodě renderNeco() strčit tu předpřipravenou šablonu místo FileTemplate, který to hledá v nějaké složce. Nějaké nápady? Díky moc

Ascaria
Člen | 187
+
0
-

Mě přijde, že se snažíš svým způsobem udělat něco, co nette normálně dělá samo, mohl bys to popsat jinak?

Editoval Ascaria (24. 5. 2012 15:20)

jtousek
Člen | 951
+
0
-

Vymýšlíš to zbytečně složitě, původní FileTemplate můžeš klidně použít jen nastavíš jinou šablonu.

	$this->template->setFile('sablona.latte');
	//alternativně ve startup nebo v action
	$this->setView('sablona');

Volil bych to druhé, potom si ještě můžeš napsat:

	public function renderSablona() {
		$this->template->... //předání proměnných šabloně hezky na jednom místě
	}

Editoval jtousek (24. 5. 2012 15:43)

Martin Mates
Člen | 179
+
0
-

jtousek napsal(a):

Vymýšlíš to zbytečně složitě, původní FileTemplate můžeš klidně použít jen nastavíš jinou šablonu.

	$this->template->setFile('sablona.latte');
	//alternativně ve startup nebo v action
	$this->setView('sablona');

Volil bych to druhé, potom si ještě můžeš napsat:

	public function renderSablona() {
		$this->template->... //předání proměnných šabloně hezky na jednom místě
	}

Problém je v tom, že to není jen v rámci jednotlivých View. Jednou se ta šablona jen vygeneruje a pošle e-mailem a jednou se použije ve view. Dá se to nějak udělat, aby to bylo společné?