Napiszę krótko: Bycze to... U mnie system skórek wygląda tak:
<?
function template($info, $bloki, $plik)
{
$wynik="";
$file=fopen($plik, 'r');
while(!flock($file, LOCK_SH)) { }
while(!feof($file))
{
$linia=fgets($file);
foreach($bloki as $blok=>$wartosc)
{
if(strpos($linia, "{BLOG-END-".$blok."-BLOK}")!==FALSE)
{
$linia=str_replace("{BLOG-END-".$blok."-BLOK}", "", $linia);
}
if(strpos($linia, "{BLOG-BEGIN-".$blok."-BLOK}")!==FALSE)
{
if($wartosc)
{
$linia=str_replace("{BLOG-BEGIN-".$blok."-BLOK}", "", $linia);
}
else
{
$pos=strpos($linia, "{BLOG-END-".$blok."-BLOK}");
while($pos===FALSE)
{
$linia=fgets($file);
$pos=strpos($linia, "{BLOG-END-".$blok."-BLOK}");
}
$linia=str_replace("{BLOG-END-".$blok."-BLOK}", "", $linia);
}
}
}
foreach($info as $nazwa=>$wartosc)
{
$linia=str_replace("{BLOG-".$nazwa."}", $wartosc, $linia);
}
$wynik.=$linia;
}
flock($file, LOCK_UN);
fclose($file);
return $wynik;
}
function echo_template($info, $bloki, $plik)
{
$file=fopen($plik, 'r');
while(!flock($file, LOCK_SH)) { }
while(!feof($file))
{
$linia=fgets($file);
foreach($bloki as $blok=>$wartosc)
{
if(strpos($linia, "{BLOG-END-".$blok."-BLOK}")!==FALSE)
{
$linia=str_replace("{BLOG-END-".$blok."-BLOK}", "", $linia);
}
if(strpos($linia, "{BLOG-BEGIN-".$blok."-BLOK}")!==FALSE)
{
if($wartosc)
{
$linia=str_replace("{BLOG-BEGIN-".$blok."-BLOK}", "", $linia);
}
else
{
$pos=strpos($linia, "{BLOG-END-".$blok."-BLOK}");
while($pos===FALSE)
{
$linia=fgets($file);
$pos=strpos($linia, "{BLOG-END-".$blok."-BLOK}");
}
$linia=str_replace("{BLOG-END-".$blok."-BLOK}", "", $linia);
}
}
}
foreach($info as $nazwa=>$wartosc)
{
$linia=str_replace("{BLOG-".$nazwa."}", $wartosc, $linia);
}
echo($linia);
}
flock($file, LOCK_UN);
fclose($file);
}
?>
Z czego te dwie funkcje się niemal powtarzają, tylko jedna z nich od razu wyrzuca na wyjście to co "myśli", podczas gdy pierwsza zwraca to w stringu do dalszej przeróbki. Oczywiście jest to silnie dostosowane do konkretnego użycia, ale proste jak sprężyna i jasne jak czarna dziura, czyli banalne :P.