zpracovat text z db jako šablonu
- Oggy
- Člen | 306
Nette 0.9.3
Mám následující problém:
Je text dejme tomu článku, který se načte z databáze. A chtěl bych aby se do článku dalo vkládat stejně jako třeba obrazek atd .. např. karta produktu.
Moje představa článku:
text článku uložený v db:
<p> text </p>
<p> text </p>
{include produkt.phtml, ‚produkt‘ ⇒ 25}
<p>text</p>
šablona clanek.phtml
<?php
...
{$text}
...
?>
nebo něco v tom smyslu .. karta produktu mám svoji stále stejnou strukturu.. údaje o produktu se načtou z db.
Jak zařídit aby {$text} se vyhodnotil ještě v LatteFiltru?
Asi to je spíše problém návrhu.. to načítání údajů o produktu až v šabloně.. kdy předám šabloně vypiš kartu produktu id 25.
A také jak
Napadá někoho hezké řešení?
Podobné by to mohlo být u vkládání odkazů:
Uživatel – vytváří text článků a v něm chce odkazovat třeba na ten
daný prodkut .. nechci aby vkládal klasickou url adresu.. ale dám mu vybrat
na jaký prodkut chce odkaz -tzn. do šablony se vloží {link Prodkut:25} a až
Nette z něj udělá odkaz při renderu..jako u klasické šablony.
- Petr Motejlek
- Člen | 293
I když nejsem básník, tak si troufám říct, že se ti snaží naznačit, že máš LatteFilter pustit na ten tvůj $text ručně.
Achich, kolikrát tady už podobný dotaz zazněl, to už radši ani nepočítám. Hledej ve fóru texty jako šablona ze stringu, StringTemplate, etc.
@Ostatní: Nejdřív zkuste hledat, než se budete ptát na věci, co se řešily už mockrát, akorát mi zbytečně zacpáváte RSS ;).
- Honza Kuchař
- Člen | 1662
- Oggy
- Člen | 306
Tak ještě budu zacpávat RSS :-) ..
nějak se mi nedaří tak jak bych si to představoval..
nejhezčí řešení uživateslky bych viděl nastavit si zpracování
LatteFilterem jako Helper:
to jak psal honza shoří předpokládám na to, že invoke je deprecated
<?php
$this->template->registerHelper('template', 'Helpers::template');
public static function template($text) {
return LatteFilter::__invoke($text);
}
{$article->text|template}
?>
Jak tedy nejlépe pustit LatteFilter v šabloně na text z db ručně?
- Oggy
- Člen | 306
text z databaze:
{include test.phtml}
<p>text</p>
při tomto {$article->text|template} zpracování vrací php kód
<?php $_cb = LatteMacros::initRuntime($template, NULL, ‚7ce9a5caa0‘); unset($_extends); ?><?php if (SnippetHelper::$outputAllowed) { ?> <?php LatteMacros::includeTemplate(„test.phtml“, $template->getParams(), $_cb->templates[‚7ce9a5caa0‘])->render() ?> <p>text</p>
při {!$article->text|template} vrací toto:
getParams(), $_cb->templates[‚edad753a1f‘])->render() ?> text
kde je prosím problém?
- Ondřej Mirtes
- Člen | 1536
Jo, to mě taky napadlo, že tenhle způsob nebude fungovat, že se ti jednoduše vypíše PHP kód :)
- Oggy
- Člen | 306
Panda napsal(a):
Zkusil bych toto:
public static function template($text) { $filter = new LatteFilter; $output = $filter->invoke($text); ob_start(); LimitedScope::evaluate($output); return ob_get_clean(); }
je potřeba vola __invoke
ale stejně je tu nějaká chybka:
Notice: Undefined variable: template in …libs/Nette/Loaders/LimitedScope.php(48) : eval()'d code on line 2