HTML kod šablony po vyrenderování

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

Dobrý den,

chtěl bych se zeptat, jestli se dá nějak dostat na vlatní HTML kód šablony po jejím vyrenderování těsně před odesláním na klienta? například v metodě afterRender()

jansfabik
Člen | 193
+
0
-

Asi to půjde takto: (ale netestoval jsem to)

protected function beforeRender()
{
	...

	ob_start();
}

protected function afterRender()
{
	$html = ob_get_contents();
	ob_end_flush();

	...
}
jansfabik
Člen | 193
+
0
-

aha, zjistil jsem, že to nefunguje

jde to řešit třeba takto (ale je to hodně velká prasárna):

	protected function beforeRender()
	{
		...

		ob_start(callback($this, 'saveOutput'));
		register_shutdown_function(callback($this, 'processOutput'));
	}

	private $output;

	public function saveOutput($output)
	{
		return $this->output = $output;
	}

	public function processOutput()
	{
		ob_end_flush();
		$html = $this->output;

		...
	}
Zip
Člen | 2
+
0
-

Mnohokrát díky. Tento postup s malinkou úpravou opravdu vyřešil můj problém :-) THUMBS UP.

Mikulas Dite
Člen | 756
+
0
-

Můžeš použít i třeba

protected function afterRender()
{
        ob_start();
        $this->template->render();
	$templateContent = ob_end_flush();
}

použít to jde i v ostatních metodách, akorát pozor, jestli už je template naplněná daty (proto je to lepší v afterRender).

Edit: pokud výstup nechceš, použí to v beforeRender a poté $this->terminate().

Editoval Mikulas Dite (21. 11. 2010 15:46)