Nahrazení obsahu proměnné z databáze
- wise
- Člen | 161
Zdravim,
potřeboval bych trošku poradit.
Z db tahám pole hodnot (key ⇒ value,…), kde value je nějaký text, který i např. obsahuje nějaké proměnné „{$investors}“ atp.
momentálně toto pole do šablony předám klasicky jako pole a
v šabloně
hodnoty zobrazuju jako array[key]. Nicméně se samozřejmě nenahradí
proměnné za jejich hodnoty.
Poradíte jak na to? Díky moc.
- wise
- Člen | 161
Ok :-)
$this->template->text = $this->model->user->getText();
Text je např.
array('foo' => 'bar', 'foo2' => '<p>Bar2 {$var}</p>')
a v template {!$text['foo2']}
a samozřejmě jako výpis
dostanu Bar2 {$var}
a ve výstupu bych samozřejmě chtěl mít hodnotu proměnné $var.
Editoval wise (20. 6. 2012 15:55)
- jtousek
- Člen | 951
Uživatel (klient) by neměl mít možnost přistupovat k proměnným jako $presenter nebo psát si tam vlastní PHP kód (který by vložit mohl kdybys to prohnal přes Latte). Vhodný přístup tedy je napsat si nějaký vlastní filter či nahrazovací fci a dát klientovi k dispozici jen několik proměnných které potřebuje, ale určitě ne celé PHP/Latte.
- bojovyletoun
- Člen | 667
napadlo mě toto:
1 řešení
- v šabloně použít
{!$text['foo']|subst}
- využít fakt, že přístup k proměnným bude $template->$attr
- a nakonec přidat helper, který provede nahrazení…
$template->text = array("tale" => "In one country was a {person}.");
$template->subst = array("person" => "thief");
$template->registerHelper('subst', function($s)use($template) {
return \Nette\Utils\Strings::replace($s, '#\{([^\}]+)\}#', function($m)use($template) {
return $template->subst[$m[1]];
});
});
$s = <<<'AAA'
{!=$text[tale]|subst}
AAA;
$template->setSource($s);
echo $template;
2. řešení
(pro ty, kteří neradi znovu vymýšlejí kolo)
případně si můžeš v presenteru vyrobit (Template
),
nastavit jí setSource('Hello, {$person}')
pak ji předat do hlavní
šablony ($template->part=$part;
), předat jí
parametry($part->setParameters(araay(person=>nixon)
)
A v hlavní šabloně {include $part}
.
Je to jen nástřel, některé věci jsou nedořešené…
Editoval bojovyletoun (20. 6. 2012 17:58)