Nefunkcni StringTemplate v Nette 2.0 Beta

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

Ahoj,
přecházel jsem v jedné aplikaci z Nette2.0-dev na Nette2.0-beta. Všechno víceméně v pořádku, jen se StringTemplate se nemůžu domluvit. Názvy tříd jsem přizpůsobil, vše funguje, jen to vypadá jakoby se nespouštěl LatteFilter. Proměnné se nenahradí za zadané parametry.
Kód ve StringTemplate je původní, tak jak je uvedený v Addons. Pracuji s ním takto:

<?php
$template = new StringTemplate();
$template->presenter = Environment::getApplication()->getPresenter();
$template->registerFilter(new Nette\Latte\Engine);
$template->content = $text;
?>

Šablonu následně vkládám do emailu a odesílám, ovšem bez nahrazených proměnných.

Nějaký tip?
Dík

Quinix
Člen | 108
+
0
-

Já jsem včera taky updatoval na betu a StringTemplate mi nefungovala… nevypsalo se vůbec nic…

řešením bylo ve třídě StringTemplate nahradit

<?php
$cache[$key] = $content = $this->compile($this->content);
?>

za

<?php
$this->setSource($this->content);
$cache[$key] = $content = $this->compile();
?>

třeba ti to taky pomůže :)

Filip Procházka
Moderator | 4668
+
0
-

Co takhle zkusit

$template = new Nette\Templating\Template();
$template-> ... nastavení helperů + latte
$template->setSource($tvojeLatteStringSablona);
$template->render();
trubi
Člen | 25
+
0
-

Dík, oba způsoby jsou víceméně totožné, klíčem byla ta metoda setSource();

hAssassin
Člen | 293
+
0
-

Zdravim, predem diky za vyreseni problemu s nefunkcnim StringTemplate ve verzi 2.0beta. Ale mam dotaz. Vubec se mi nelibi tento radek v kodu samotneho helperu:

$template->presenter = $template->control = \Nette\Environment::getApplication()->getPresenter();

Resp. nelibi se mi tam ten Environment (snazim se ho vubec nepouzivat). Je nejaka jina moznost jak se dostat k presenteru? Jedna me napadlo a to predavat ho jako parametr primo helperu, ale to se mi uplne nelibi :( Any ideas?

Editoval hAssassin (26. 7. 2011 5:46)

Filip Procházka
Moderator | 4668
+
0
-

Máš hate day? :) Předat konstruktorem je ta nejčistější varianta.

hAssassin
Člen | 293
+
0
-

@HospiLan > ehm… :-[ Tak nejak nechapu, nebo si nedovedu predstavit… Jak predat konstruktorem? Jako v tovarnicce, kde vytvarim novou instanci toho StringTemplate? To me taky napadlo, ale to je problem, jelikoz tu tovarnicku (nebo vlastne celou metodu pro dany helper) je soucasti tridy Helpers a je staticka a bohuzel a aktualnim presenetru taky nevi. Nebo to myslis jinak? Jak? :-)

Filip Procházka
Moderator | 4668
+
0
-

Pokud je to statické tak to buď přepiš, nebo tam nech ten Environment.

Quba
Člen | 3
+
0
-

Nepodařilo se mi rozběhnout stringTemplate ve verzi Nette 2.0.

Na fóru jsem našel spoustu různých útržkovitých informací co se kde musí opravit v https://componette.org/search/?q=stringtemplate, ale nedokázal jsem to dát dohromady. Sledoval jsem ještě vlákno https://forum.nette.org/cs/6271-stringtemplate-a-vykresleni-komponenty-widget-component

Skončil jsem u funkce prezenteru, která text prožene přes Latte:

<?php
      $html=$this->TextByLatte("<a n:href=\"Homepage:place, 11>Odkaz</a>");
?>
<?php
	public function TextByLatte($text){
		$template = new Nette\Templating\Template2();
		$template->presenter = Nette\Environment::getApplication()->getPresenter();
		$template->registerFilter(new Nette\Latte\Engine);
		$template->setSource($text);
		$text=$template->render();
		return $text;
	}
?>

Při volání ale dostávám hlášku „Notice Undefined variable: control“

Nemohl byste prosím někdo zveřejnit funkční verzi, běžící v aktuálním Nette 2.0

knyttl
Člen | 196
+
0
-
<?php
	public function TextByLatte($text){
		$template = new Nette\Templating\Template2();
		$template->presenter = Nette\Environment::getApplication()->getPresenter();
		$template->registerFilter(new Nette\Latte\Engine);
		$template->setSource($text);
		$text=$template->render();
		return $text;
	}
?>

Při volání ale dostávám hlášku „Notice Undefined variable: control“

Viz výše:

<?php
$template->presenter = $template->control = \Nette\Environment::getApplication()->getPresenter();
?>
Quba
Člen | 3
+
0
-

Díky, za pomoc.

Nakonec jsem uspěl s touto funkcí (ještě byl problém s použitím $template->render(), který udělal echo místo uložení do stringu $txt)

<?php
	public function TextByLatte($text){
		$template = new Nette\Templating\Template();
		$template->presenter = $template->control = \Nette\Environment::getApplication()->getPresenter();
		$template->registerFilter(new Nette\Latte\Engine);
		$template->setSource($text);
		$txt=$template->__toString();
		return $txt;
	}
?>