Stránky v databázi – escapování proměnných

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

Ahoj.

Chtěl bych vás poprosit o radu.
Do databáze jsem si uložil obsah stránek, které se po zadání jejich url zobrazí.
Problém však nastává , když stránka obsahuje např:

{$this->context->parameters["wwwDir"]}

Zajímá mne, jestli a jak se vůbec dá udělat, aby se vypsal obsah tohoto příkladu? Nyní se mi to totiž vypisuje jen jako text.

PS: „Magický“ ! v šabloně používám ;)

Editoval minzo (14. 4. 2012 22:30)

Jan Endel
Člen | 1016
+
0
-

Bude zapotřebí výstup z databáze ještě prohnat přes templating v Nette, jak na to de dočtěš v dokumentaci

Editoval pilec (14. 4. 2012 23:18)

minzo
Člen | 23
+
0
-

Pilec: Molh bys to nějak rozvést?
Zkusil jsem:

	$template = new Template;
	$template->content = $page->content;
	$template->render();
	dd($template);

Ale nijak to nepomohlo.

Editoval minzo (15. 4. 2012 9:53)

ViPEr*CZ*
Člen | 817
+
0
-
$template = new Template;
$template->setSource(...);
$template->render();
minzo
Člen | 23
+
0
-

ViPEr*CZ: Nn to není ono ;)
Já potřebuji, aby to ostalo v proměnné a né, aby se to takto vypsalo.
+

$user->identity->id
{$user->identity->id}

Zůstanou jako text a nezmění se na id přihlášeného uživatele.

Editoval minzo (15. 4. 2012 10:34)

Jan Endel
Člen | 1016
+
0
-

mělo by fungovat $template->content = $templateFromDatabase; při vypsání se přetypuje na string a tím i přeloží. (tímhle řádkem nahradit ten $template->render();

Editoval pilec (15. 4. 2012 11:30)

minzo
Člen | 23
+
0
-

pilec: Přesně takto to mám a nefunguje to.

	$template = new Template;
	$template->content = $page->content;

A pokud dumpnu $template nebo $template->content, tak je to úplně stejné, jako když dumpnu $page->content (data z DB)

ViPEr*CZ*
Člen | 817
+
0
-

No to co jsem psal já, převede makra na hodnoty… pochopil jsem to tak, že to je OK. Pokud jsou v DB makra, tak se buď vypíšou jako text nebo se převedou přes Latte na hodnoty. Co vlastně potřebujete udělat?

minzo
Člen | 23
+
0
-

ViPEr*CZ: V DB mám uloženou stránku, které obsahuje n:makra, ale i normální, případně $user data…
Potřebuji je v presenteru „převést“ na jejich hodnotu. Místo {$user->identity->nick} mít Minzo a poté je pomocí $this->template->content předat do templatu, kde stím ještě pracuji.

Snad už je to lépe napsané ;)

Jan Endel
Člen | 1016
+
0
-

chybí ti tam řádek zaregistrování latté filtrů:

$template->registerFilter(new \Nette\Latte\Engine);

jinak doufám, že takto s tím nepracuješ v presenteru.

minzo
Člen | 23
+
0
-

piles: Jj nemám, ale to neřeší nic na tom, že když je v $page->content {$user->identity->nick} Tak se to vypíše jako {$user->identity->nick} a né Minzo.

Ano řešim to v presenteru a chci to předat do templatu.

Jan Endel
Člen | 1016
+
0
-

To co potřebuješ se často řeší v posílání emailů a v dokumentaci je to krásně popsané. Zkus to podle toho. Akorát teda nepoužiješ FileTemplate ale jen Template a nad objektem Template zavoláš setSource(…).

Editoval pilec (15. 4. 2012 14:03)

minzo
Člen | 23
+
0
-

pilec: Asi stále něco dělám špatně, ale poříd stejný problém #11

	$template = $this->createTemplate();
	$template->setSource($page->content);
	dump($template);
Jan Endel
Člen | 1016
+
0
-

Trošku jsem si zalaboroval, ale toto řešení mi funguje:

default.latte:

{block content}

<h1>Domovská stránka</h1>

{$hello}

{$test}

HomePresenter.php:

class HomePresenter extends BasePresenter
{

    public function renderDefault()
    {
        $this->template->hello = "hello";

        $template = $this->createTemplate('Nette\Templating\Template');
        $template->setSource('{$hello2}');
        $template->hello2 = "hello - funguje";

        $this->template->test = $template;
    }
}

a výstup je očekáváný:

Domovská stránka

hello hello - funguje
minzo
Člen | 23
+
0
-

pilec: Díky, že mi věnuješ tolik času ;)
Zkusil jsem přímo tento příklad a píše mi to:
Nette\InvalidStateException Template file name was not specified.

Nette Framework 2.0.3 (revision eb558ae released on 2012–04–04)

Jan Endel
Člen | 1016
+
0
-

Na řádku $template = $this->createTemplate('Nette\Templating\Template'); je podstatný ten string 'Nette\Templating\Template' jinač to defaultně vytváří fileTemplate kterou ty nechceš :).

Editoval pilec (15. 4. 2012 17:35)

minzo
Člen | 23
+
0
-

pilec: Však jsem psal, že to dělá i v případě použití tohoto příkladu. Takže ta podstatná část tam je.

Smazal jsem cache, ale to nijak nepomohlo.

Editoval minzo (15. 4. 2012 19:26)

Jan Endel
Člen | 1016
+
0
-

Dej prosím někam veřejně celou laděnku v HTML, nějak se mi to nepozdává.

minzo
Člen | 23
+
0
-

Tak jsem testoval a přišel jsem na to, kde je problém.

V BasePresenter mám:

protected function createTemplate($class = NULL)
{
	$template = parent::createTemplate();

	$template->registerHelper("timeAgoInWords", "\Latte\Helpers::timeAgoInWords");
	$template->registerHelper("texy", callback(new \Utils\MyTexy($this->context->parameters), "process"));

	return $template;
}

Pokud to smažu, tak to funguje tak, jak má.
Jenže tim pádem nastává druhý problém. Jak zaregistrovat tyto Helpery?

Editoval minzo (15. 4. 2012 20:59)

Aurielle
Člen | 1281
+
0
-

Tomu parent::createTemplate() nepředáváš ten volitelný parametr $class. To je jádro celého problému.

minzo
Člen | 23
+
0
-

gmvasek: A joo, díky #FAIL :/