Php Templatező készítése
Sziasztok!
Egy egyszerű templatezőt szeretnék csinálni az oldalamhoz phpban, nem szeretnék semmi extrát, mint SMarty, vagy ilyenek, csak nagyon alap dolgokat:
foreach, if-else, esetleg switch, de az már extra..
Az egész úgy indult, hogy eredetileg mysqlhez írtam egy sql statement templatezőt, aztán kicsit belegondoltam, hogy jobban járok, ha csinálok egy sima templatezőt, és abból extendelem ki a db_statement objectemet. Ezért bindParams, compile, meg ilyeneket a függvények nevei. Ami most megvan az így néz ki:Ezt szeretném kicsit továbbfejleszteni, hogy egy foreach kezelést is el tudjon végezni.
A problémám abban van, hogy ez a mostani rész a compile-ban a replace_template metódust hívja meg minden egyes elemrem, és ez nekem azért hasznos, mert így nem kell kiescapelnem a külső forrásból jövő adatokból azokat a részeket, amik ugyanolyanok, mint ami a változókat kéri le. Például ha valaki {$pista} változót egy olyan stringre állítja, hogy "{$zsuzsi}", akkor azt nyilván escapelni kell abban az esetben, ha a feldolgozó kód többször is áthaladhat afölött a rész fölött.
Ez olyan esetben fordulhat elő, mint például a foreach, amikor a cikluson belüli rész többször lefut, ilyenkor nyilván célszerű kesselni azokat az értékeket, amelyek változatlanok maradtak.
Nekem azzal van a problémám, hogy ezt a kesselést ennek a programszerkezetnek a megtartásával hogyan lehet elérni? Ha sehogy sem, akkor azzal kapcsolatban szeretnék választ kapni, hogy hogyan kell módosítanom mindehhez a program szerkezetét?
Üdv. Laci
■ Egy egyszerű templatezőt szeretnék csinálni az oldalamhoz phpban, nem szeretnék semmi extrát, mint SMarty, vagy ilyenek, csak nagyon alap dolgokat:
foreach, if-else, esetleg switch, de az már extra..
Az egész úgy indult, hogy eredetileg mysqlhez írtam egy sql statement templatezőt, aztán kicsit belegondoltam, hogy jobban járok, ha csinálok egy sima templatezőt, és abból extendelem ki a db_statement objectemet. Ezért bindParams, compile, meg ilyeneket a függvények nevei. Ami most megvan az így néz ki:
class Template
{
protected $pattern="{\$([\w_]+)}";
public function __construct($template,$pattern=null)
{
$this->template=$template;
$this->params=array();
$this->cache=null;
if ($pattern)
{
$this->pattern=$pattern;
}
}
public function bindParam($key,$value)
{
$this->params[$key]=$value;
$this->cache=null;
return $this;
}
public function bindParams($source)
{
foreach($source as $key => $value)
{
$this->bindParam($key,$value);
}
return $this;
}
protected function replace_template($key)
{
return $this->params[$key];
}
public function compile()
{
if (!is_string($this->cache))
{
$this->cache=preg_replace("/".$this->pattern."/e",'$this->replace_template(\1)',$this->template);
}
return $this->cache;
}
}
A problémám abban van, hogy ez a mostani rész a compile-ban a replace_template metódust hívja meg minden egyes elemrem, és ez nekem azért hasznos, mert így nem kell kiescapelnem a külső forrásból jövő adatokból azokat a részeket, amik ugyanolyanok, mint ami a változókat kéri le. Például ha valaki {$pista} változót egy olyan stringre állítja, hogy "{$zsuzsi}", akkor azt nyilván escapelni kell abban az esetben, ha a feldolgozó kód többször is áthaladhat afölött a rész fölött.
Ez olyan esetben fordulhat elő, mint például a foreach, amikor a cikluson belüli rész többször lefut, ilyenkor nyilván célszerű kesselni azokat az értékeket, amelyek változatlanok maradtak.
Nekem azzal van a problémám, hogy ezt a kesselést ennek a programszerkezetnek a megtartásával hogyan lehet elérni? Ha sehogy sem, akkor azzal kapcsolatban szeretnék választ kapni, hogy hogyan kell módosítanom mindehhez a program szerkezetét?
Üdv. Laci
Feldolgozással kapcsolatosan
Arra jutottam, hogy ennek a szerkezetnek a megtartásával úgy lehet megoldani a dolgot, ha blokkonként több classre szedem szét a templatet, és a változók közé automatikusan felveszem a blokkokat.
Szóval mondjuk a legegyszerűbb példa:
PHP
mi lenne ezzel a célod?
Üdv,
Felhő
Igaz