Příkaz include přes renderToString

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

Ahoj,

chci používat příkaz include v latte šabloně (viz dole) načítané z databáze do renderToString. Bohužel metoda jen odstraní uvozovky a hranaté závorky, obsah nevloží. Získaný text pak vkládám do default.latte skrz {$text|noescape}, ale to jen pro úplnost. V includované šabloně box-contact je teď jen html text, nic složitého.

<?php
PagePresenter:renderDefault
...
$latte = new \Latte\Engine;
$latte->setLoader(new \Latte\Loaders\StringLoader());
$text = $latte->renderToString(str_replace("&quot;", '"', $page->text));
// zde v $text je to uz blbe viz dole
...
?>

Šablona ($page->text):

<p>bla bla...</p>
{include "../components/box-contact.latte"}
<p>bla bla...</p>

Získaný výstup:

<p>bla bla...</p>
../components/box-contact.latte
<p>bla bla...</p>

Požadovaný výstup:

<p>bla bla...</p>
<p>Obsah souboru box-contact.latte</p>
<p>bla bla...</p>

Co dělám špatně?

janpecha
Backer | 75
+
0
-

StringLoader nepracuje se soubory na disku, ale se „soubory v paměti“. Názvy souborů (šablon) a jejich obsah můžeš předat v konstruktoru https://api.nette.org/…der.php.html#…

EDIT: případně si můžeš vytvořit vlastní loader, který bude includovat soubory z disku

Editoval janpecha (20. 11. 2016 17:49)