Renderovanie html kódu v parametri a dedičnosť

JakubH
Člen | 13
+
0
-

Zdravím,
Je možné renderovať html kód bez použitia filtru noescape? Skúšal som niekoľko riešení ale ani jedno nefungovalo na 100%. Snažím sa dosiahnuť renderovanie obsahu z databázy. Aj zároveň dedičnosť funkcií, ktoré budú predom definované.

$this->latte_parameters = array(
	'title' => $lang["list"]["title"],
	'content' => '<b>Túčný text<b>',
);
$this->latte->render('clanok.latte', $this->latte_parameters);

Html kód v parametri, ktorý obsahuje funkciu.

$this->latte_parameters = array(
	'title' => $lang["list"]["title"],
	'content' => '<b>Túčný text{funkcia(1)}</b>',
);
$this->latte->render('clanok.latte', $this->latte_parameters);

Snažím sa naprogramovať vlastné CMS, ktoré bude používať Latte a bude zobrazovať obsah navyše ak tak bude definované pri vytrvaní stránky (napr.: článok).

Používame len Latte 2.7 s Utils.

Ďakujem vopred za odpoveď :)

David Grudl
Nette Core | 8218
+
+1
-

Na HTML bez noescape jde použít 'content' => new Latte\Runtime\Html('<b>Túčný text</b>'). Pokud tam má být i Latte, tak je potřeba proměnnou nejprve vyrenderovat přes Latte.

JakubH
Člen | 13
+
0
-

Ďakujem za radu ohľadom Latte\Runtime\Html

Funguje to presne podľa mojich predstáv.
Teraz sa tam snažím dať aj spomínané funkcie:

 $this->latte->addFunction('clanok', function ($test) {
 	$latte_parameters = array(
 		'content' => new Latte\Runtime\Html('<b>Toto je článok: '.$test.'</b>')
	);
	$this->latte->render('article.latte', $latte_parameters);
});
$this->latte_parameters = array(
    'title' => $page["title"],
	'content' => new Latte\Runtime\Html('<h1>Túčný text</h1>{clanok(1)}')
);

$this->latte->render('page.latte', $this->latte_parameters);

Len nikde som nenašiel vyrenderovanie premennej. Ani moje pokusy nefungovali.

Ak by ste mi vedeli poradiť aj ohľadom tohto bude veľmi vďačný.

Ďakujem vopred za odpoveď :)

David Grudl
Nette Core | 8218
+
+2
-

Myslím že to půjde jen nějak takto

$latteString = clone $this->latte;
$latteString->setLoader(new Latte\Loaders\StringLoader);

$this->latte_parameters = array(
    'title' => $page["title"],
	'content' => new Latte\Runtime\Html($latteString->renderToString('<h1>Túčný text</h1>{clanok(1)}'))
);

$this->latte->render('page.latte', $this->latte_parameters);