Nefunkcni StringTemplate v Nette 2.0 Beta
- trubi
- Člen | 25
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
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
Co takhle zkusit
$template = new Nette\Templating\Template();
$template-> ... nastavení helperů + latte
$template->setSource($tvojeLatteStringSablona);
$template->render();
- hAssassin
- Člen | 293
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)
- hAssassin
- Člen | 293
@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
Pokud je to statické tak to buď přepiš, nebo tam nech ten Environment.
- Quba
- Člen | 3
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
<?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
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;
}
?>