<?php
class template
{
var $body;
function template()
{
}
function open($file = '')
{
if (is_array($file))
{
foreach ($file as $key)
{
$this->body .= file_get_contents($key);
}
}
else
{
$this->body .= file_get_contents($file);
}
$this->process();
}
function process()
{
$body = $this->body;
$body = preg_replace('/\<!--\s(.*?)\.while\s--\>/i', '<?php foreach ($$1 as $$1key => $$1value) { ?>', $body);
$body = preg_replace('/\{(\w+)\.(\w+)\}/i', '<?php echo $$1value["$2"]; ?>', $body);
$body = str_replace('<!-- endwhile -->', '<?php } ?>', $body);
$this->body = $body;
}
function output($type = '')
{
switch($type)
{
default;
$this->open(array('theme.html'));
$this->output('render');
break;
case 'render':
$block = array(0 => array('file' => 'sample1.html'), 1 => array('file' => 'sample2.html'));
eval('?>'. (string) $this->body .' <?php ');
break;
}
}
}
$temp = new template();
$temp->output();
?>theme.htmlincluded successfuly theme.html
<br />
<!-- block.while -->
<!-- INCLUDE {block.file} --> <br />
<!-- endwhile -->Arkadaşlar, merhaba.Bi template sınıfı yazıyorum, şöyle bir sorunum var örneğin
ilk olarak theme.html çekiyorum içerisinde herhangi bi tanımladığım metini, replace ederek php'deki verilerin işlenmesini sağlıyorum.
process() fonksiyonunda henüz INCLUDE replace etmedim ama edersem, şöyle birşey olacak aşağı yukarı
preg_match_all('#<!--\sINCLUDE\s(.*?)\s-->#', $this->add_body, $matches);
foreach ($matches[1] as $key)
{
$body = str_replace('<!-- INCLUDE '. $key .' -->', file_get_contents($key), $body);
}Ama sorun şuki, ilk yüklenen html dosyasında, zaten aramak istediklerimi buluyorum bunları evala yazdırıyorum, arasında php geçiyorsa örneğin bir dizi<!-- block.while -->
<!-- INCLUDE {block.file} --> <br />
<!-- endwhile -->{block.file} çıktısı normalde<!-- INCLUDE sample1.html --> <!-- INCLUDE sample2.html -->Bunlar eval, yani son işlemde ekrana yazdırma kısmında çıkıyor, ben bu ekrana çıkan kodların sonsuz bi döngüye girmesini istiyorum, eğer çıktıda INCLUDE var ise, tekrar o sayfa include edilsin, normalde döngü arasında değil normal
<!-- INCLUDE deneme.html --> yazdığımda bunu INCLUDE ediyor ama döngü arasında kod şöyle bir şey oluyor
<!-- INCLUDE {test.name} --> ekrana çıktısı bu oluyor işlenmesi gereken şeklide şu
<?php foreach ($block as $blockkey => $blockvalue) { ?>
<!-- INCLUDE <?php echo $blockvalue["file"]; ?> --> <br />
<?php } ?>Şimdiden, teşekkür ediyorum yardımcı olacak arkadaşlara.