«
«
Kullanıcı Masası
Hoşgeldin Ziyaretçi

Kategoriler
BLSTM PHP Tema Motoru V3

BLSTM Tema Motoru Hakkında



Bu yazımda 2011 yılında kendi projelerimde kullanmak amacıyla yazmış olduğum ve halen bir çok projemde kullandığım tema motorunu sizlerle paylaşmak istedim. Aslında mantığı çok basit ama işlevselliği oldukça yeterli, tema motoru php ve html kodlarını birbirinden mümkün mertebe ayırmak ve daha akıcı ve rahat bir kodlama yapmak için son derece önemli.

Hazırlanmış olan tema motorunun esnek olmasıda çok önemli, bu tema motorunun en önemli özelliklerinden biriside istediğiniz komutları rahat bir şekilde ekleyebilmeniz. Bu tema motoru her sayfa çalıştırıldığında işlemciyi kasacak işlemler yapmaz, yani işlemciyi yoran bir yapısı yok, pek çok tema motoru sayfa her çalıştırıldığında kodları tekrar tekrar gözden geçirir ve bu işlem siteyi kullanan kullanıcı sayısı arttıkça işlemciyede o oranla yük bindirir. Bu tema motorunda bu işlem sadece dosyada siz bir değişiklik yapmışsanız bir kere çalışır ve o değişiklikleri işler, bir cache/derleme dosyası oluşturur ve eğer bir değişiklik yoksa sonraki sayfa yüklemelerinde cache/derleme dosyasını okur, bu sayede işlemciye ve ram'e ekstra yük bindirmemiş olur. Derlenen her dosya tema dosyasının adıyla kaydedilir bu da ftp de dosya kalabalığı oluşmasının önüne geçer.


Aklınıza şöyle bir soru gelebilir, bu sistem eğer dosyada değişiklik yapıldığını algılıyorsa o zaman dosyaları her sayfa yenilendiğinde tekrar tekrar kontrol ediyordur. Bu soruya cevabım evet dosyaları her sayfa yenilendiğinde tarıyor, ancak dosyaların içini taramıyor, onun yerine dosyaların son değişiklik tarihini kontrol ediyor, bu sayede sistemi yormayan bir kontrol mekanizması elde edilmiş oluyor.

PHP Tema Motoru Sınıfı



Kod Çizelgesi:[Hepsini Seç] 

@ini_set('default_charset''utf-8');
define('BLSTM_TD',true);
// class hazırlanıyor //
Class BLSTM
{
    // değişkenler tanımlanıyor //
                
    /******************************************/
    
    // Tema dosyası aktarılamadığı zaman, ekrana yazılacak iletiyi bu değişkene yazabilirsiniz...
    
    Private $ileti='Dosya Açılamıyor:';
    
    // Tema dosyası aktarılamadığı zaman, ekrana yazılacak iletiyi bu değişkene yazabilirsiniz...
        
    /******************************************/
    
    // Derlenmiş tema dosyalarının nereye kaydedileceğini bu değişkene yazabilirsiniz...
    
    Static $derleme_klasor "Ayarlar/TemaMotoru/derle/";
    
    // Derlenmiş tema dosyalarının nereye kaydedileceğini bu değişkene yazabilirsiniz...
        
    /******************************************/
    
    // Temaların içerisinde bulunduğu klasörün ismini bu değişkene yazabilirsiniz...
    // Kullandığınız Tema dosyasının adını bu değişkene yazabilirsiniz...
    
    Static $tema "Sablonlar/Tema/";

    // Kullandığınız Tema dosyasının adını bu değişkene yazabilirsiniz...
    // Temaların içerisinde bulunduğu klasörün ismini bu değişkene yazabilirsiniz...
        
    /******************************************/
            
    // Tema dosyalarının uzantısı belirleniyor...
    
    Static $tema_dosyasi_uzantisi ".php";

    // Tema dosyalarının uzantısı belirleniyor...
    
    /******************************************/
    
    Private $dosya;
    
    /******************************************/
    
    Private $aDosya;
    
    /******************************************/
    
    Private $DosyaKontrolTema;

    /******************************************/

    Private $TemaDerlemeTarih;

    /******************************************/

    Private $DosyayiOku;
    
    /******************************************/

    Private $BaglantiOlustur;

    /******************************************/

    Private $DdosyaTarihi;

    /******************************************/
    
    Private $Tema;
    
    /******************************************/
    
    Private $PHP;

    /******************************************/

    // değişkenler tanımlanıyor  - sonu //
    
    Static function ayar$gelen$deger null )
    {
        if( is_array$gelen ) )
        {
            foreach( $gelen as $key => $deger )
            {
                self::ayar$key$deger );
            }
        }
        else if( property_exists__CLASS__$gelen ) ) 
        {
            self::$$gelen $deger;
        }
    }
    
    // tema dosyası aktarılıyor //
    
    Public function __construct$dosya $hariciDizin='')
    {
        if( !($dosyaAc = @fopenself::$tema.$hariciDizin.$dosya.self::$tema_dosyasi_uzantisi,'r' ) ) ) die( $this->ileti.' "'.self::$tema.$hariciDizin.$dosya.self::$tema_dosyasi_uzantisi.'"' );

        $dosya_sonuc = @fread$dosyaAcfilesizeself::$tema.$hariciDizin.$dosya.self::$tema_dosyasi_uzantisi ) );
                    
        @fclose$dosyaAc );

        $this->dosya $dosya// değişken aktarılıyor //
        
        $this->aDosya $dosya.'.php'// ana dosya adı düzenleniyor //
            
        $this->DosyaKontrolTema filemtimeself::$tema.$hariciDizin.$dosya.self::$tema_dosyasi_uzantisi); // dosya tarihi alınıyor //
        
        // değiştirilecek kodlar //

        $KodDeposu = array( /*'\<\?' => '<?','\?\>' => '?>',*/
        '\<\{include\=(.*?)\}\>' => '<?php include(\'\\1\'); ?>',
        '\<\{if(.*?)\}\>' => '<?php if\\1: ?>',
        '\<\{elseif(.*?)\}\>' => '<?php elseif\\1: ?>',
        '\<\{else\}\>' => '<?php else: ?>',
        '\<\{endif\}\>' => '<?php endif; ?>',                
        '\<\{while(.*?)\}\>' => '<?php while\\1: ?>',
        '\<\{endwhile\}\>' => '<?php endwhile; ?>',
        '\<\{foreach(.*?)\}\>' => '<?php foreach\\1: ?>',
        '\<\{endforeach\}\>' => '<?php endforeach; ?>',
        '\<\{for(.*?)\}\>' => '<?php for\\1: ?>',
        '\<\{endfor\}\>' => '<?php endfor; ?>',
        '\<\{FonkPrintF=(.*?)\}\>' => '<?php printf\\1; ?>',    
        '\<\{Fonksiyon=(.*?)\}\>' => '<?php echo \\1; ?>',    
        '\<\[\$(.*?)\=(.*?)\]\>' => '<?php \$\\1= \\2; ?>',    
        '\<\{FonkDeg=\((.*?),(.*?)\)\}\>' => '<?php \\1= \\2; ?>',    
        '\<\{FonkSade=(.*?)\}\>' => '<?php \\1; ?>',    
        '\<\{FonkKosul=(.*?)\}\>' => '\\1',    
        '\<\{sorgux\((.*?)\|(.*?)\)\}\>' => '<?php \\1X = $SQL->sorgu("\\2"); \\1 = array(); while(\\1_1 = $SQL->fetch_assoc(\\1X)): \\1[] = \\1_1; endwhile; ?>',
        '\<\{sorgu\((.*?)\|(.*?)\)\}\>' => '<?php \\1_2 = $SQL->sorgu("\\2"); \\1 = $SQL->fetch_assoc(\\1_2); ?>',            
        '\<\{sorgu\((.*?)\)\}\>' => '<?php $SORGU = $SQL->sorgu("\\1"); ?>',
        '\<\{\#(.*?)\}\>' => '<?php echo \\1; ?>',        
        '\<\{\$(.*?)\}\>' => '<?php echo $\\1; ?>',    
        '\<\{\+\+\((.*?)\)\+\+\((.*?)\)\+\+\}\>' => '<?php \\1 +=(\\2); ?>',
        '\<\{\.\.\((.*?)\)\.\.\((.*?)\)\.\.\}\>' => '<?php \\1 .=(\\2); ?>',
        '\<\{\+\+\$(.*?)\+\+\}\>' => '<?php $\\1++; ?>',
        '\<\{(.*?)\((.*?)\)\}\>' => '<?php echo \\1(\\2); ?>');

        // değiştirilecek kodları - sonu //
        
        $this->Tema $this->DerlemeDosyaOku();
        
            if(($this->DosyaKontrolTema != @$this->Tema[1]))
            {
                // koşullar, değişkenler ve döngüler dönüştürülüyor //

                    foreach( $KodDeposu as $anahtar => $deger )
                    {    
                        $dosya_sonuc preg_replace"|$anahtar|si""$deger"$dosya_sonuc );
                    }

                // koşullar, değişkenler ve döngüler dönüştürülüyor - sonu //
                    
                $this->DerlemeYap$dosya_sonuc ); // dosya fonksiyona aktarılıyor //
                        
                $this->DosyaAktar$this->dosya.'.php' );
            }
            else 
            {
            
                if( !( @fopenself::$derleme_klasor.$this->aDosya,'r' ) ) )
                {
                    // koşullar ve döngüler dönüştürülüyor //
                    
                    foreach( $KodDeposu as $anahtar => $deger )
                    {                                
                        $dosya_sonuc preg_replace"|$anahtar|si""$deger"$dosya_sonuc );
                    }
                    // koşullar ve döngüler dönüştürülüyor - sonu //
                                        
                    $this->DerlemeYap$dosya_sonuc ); // dosya fonksiyona aktarılıyor //
                
                }
                
                $this->DosyaAktar$this->dosya.'.php' );
            }
    }
        
    // tema dosyası aktarılıyor - sonu //
    
    
    // derleme yapılıyor ve yeni tema dosyası aktarılıyor //
    
    Private function DerlemeYap$yaz )
    {
        // tema dosyası ismi kontrol ediliyor //
        
        $this->dosya $this->DosyaKontrol$this->dosya );
        
        // tema dosyası ismi kontrol ediliyor - sonu //

        // yeni dosya oluşturuluyor //
        
        $dosya = @fopenself::$derleme_klasor.$this->dosya.'.php','w' ) or die( 'Derleme Dosyası oluşturulamadı!..' ); 
        
        @fwrite$dosya,"<?php 
        /*///////////////////////////////////////////////////////////////////////////////*/
        /*/                           BLS Tema Motoru (BLS-TM) V2                             /*/
        /*/-----------------------------------------------------------------------------/*/
        /*/                  Telif - Copyright (c) 2011 Yücel KAHRAMAN (ByLegenS)            /*/
        /*/                      http://www.netgenel.net   -   [email protected]                /*/
        /*/                                    http://www.phpkf.com                            /*/
        /*/    Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.    /*/
        /*///////////////////////////////////////////////////////////////////////////////*/

        \$JHJlc2ltMTIzMiA9IG1kNShyYW5kKDExMTExLDk5OTk5OTk5OTkpKTs={$this->DosyaKontrolTema};
?>
{$yaz}"); // dosya içeriği yazılıyor //

        @fclose$dosya ); // dosya kapatılıyor //

    }
    
    // derleme yapılıyor ve yeni tema dosyası aktarılıyor - sonu //
    
    
    Private function DerlemeDosyaOku()
    {
    
        $this->DdosyaTarihiself::$derleme_klasor.$this->dosya.'.php'// dosya belirleniyor.

        $this->BaglantiOlustur[email protected]fopen ($this->DdosyaTarihi,'r'); // bağlantı oluşturuluyor.

        $this->DosyayiOku = @fread$this->BaglantiOlustur, @filesize($this->DdosyaTarihi) ); // dosya okunuyor.
            
        @fclose($this->BaglantiOlustur); // bağlantı kapatılıyor.
            
        preg_match('/\$JHJlc2ltMTIzMiA9IG1kNShyYW5kKDExMTExLDk5OTk5OTk5OTkpKTs\=(.*?)\;/'$this->DosyayiOku$this->TemaDerlemeTarih); // değişkenler aranıyor.
        
        return $this->TemaDerlemeTarih// veri döndürülüyor.
    }

    // dosya akratma işlemi yapılıyor //
    
    
    Private function DosyaAktar$tema_isim )
    {
        extract$GLOBALS ); // değişkenler tanımlanıyor...

        // tema dosyası ismi kontrol ediliyor //
        
        $this->dosya $this->DosyaKontrol$tema_isim );
        
        // tema dosyası ismi kontrol ediliyor - sonu //

        // yeni dosya çekiliyor //
            
        $tema_isim = ( self::$derleme_klasor.$tema_isim ); 
            
        if ( !file_exists$tema_isim ) ) exit();
            
        include( $tema_isim );
            
        // yeni dosya çekiliyor //
    }
    
    // dosya akratma işlemi yapılıyor - sonu //

    
    // dosya kontrol ediliyor //
    
    Private function DosyaKontrol$gelen_dosya )
    {
        // tema dosyası ismi kontrol ediliyor //
    
        if ( preg_match'/(https\:\/)/'$gelen_dosya ) == )  die( 'Dosya isminde web adresi bulunmakta!..<br><br>'.$gelen_dosya );
        
        elseif ( preg_match'/(http\:\/)/'$gelen_dosya ) == ) die( 'Dosya isminde web adresi bulunmakta!..<br><br>'.$gelen_dosya );
        
        elseif ( preg_match'/(ftp\:\/)/'$gelen_dosya ) == ) die( 'Dosya isminde ftp adresi bulunmakta!..<br><br>'.$gelen_dosya );
        
        else  return( $gelen_dosya );
        
        // tema dosyası ismi kontrol ediliyor - sonu //
    }
    
    // dosya kontrol ediliyor - sonu //
}

// class hazırlanıyor - sonu //


Kullanım Şekli



Başlık dosyasına veya sisteminizin ayar dosyasına eklenecek kodlar.

Kod Çizelgesi:[Hepsini Seç]

    if (!defined('BLSTM_TD')) Include 'TemaMotoru/tema_donustur.php';
    BLSTM::AYAR("tema"'temalar/anatema/'); /* Tema dizini */
    BLSTM::AYAR("derleme_klasor""TemaMotoru/Derle/"); /* Derleme klasörü */


Tema dosyası oluştırmak istediğiniz PHP dosyalarına aşağıdaki kodları ekleyebilirsiniz.

Kod Çizelgesi:[Hepsini Seç]

    Include 'baslik_veya_ayar_dosyaniz.php';
    new BLSTM('tema_dosyasinin_adi');


tema_dosyasinin_adi bu alana tema dosyasının adını yazmanız gerekmekte, dosya uzantısı belirtmeyin, varsayılan dosya uzantısı ".php" eğer dosya uzantısını değiştirmek istiyorsanız aşağıdaki kodu ayar dosyanıza ekleyin ve istediğiniz şekilde düzenleyin.

Kod Çizelgesi:[Hepsini Seç]
BLSTM::AYAR("tema_dosyasi_uzantisi"'.php');


Tema Motoruna Ekstra İşlev Kazandırma



Tema motoruna ekstra işlev kazandırmak için sınıf içerisinde yer alan aşağıdaki yapıya istediğiniz kodları ekleyebilirsiniz.

Kod Çizelgesi:[Hepsini Seç] 

        $KodDeposu = array( /*'\<\?' => '<?','\?\>' => '?>',*/
        '\<\{include\=(.*?)\}\>' => '<?php include(\'\\1\'); ?>',
        '\<\{if(.*?)\}\>' => '<?php if\\1: ?>',
        '\<\{elseif(.*?)\}\>' => '<?php elseif\\1: ?>',
        '\<\{else\}\>' => '<?php else: ?>',
        '\<\{endif\}\>' => '<?php endif; ?>',                
        '\<\{while(.*?)\}\>' => '<?php while\\1: ?>',
        '\<\{endwhile\}\>' => '<?php endwhile; ?>',
        '\<\{foreach(.*?)\}\>' => '<?php foreach\\1: ?>',
        '\<\{endforeach\}\>' => '<?php endforeach; ?>',
        '\<\{for(.*?)\}\>' => '<?php for\\1: ?>',
        '\<\{endfor\}\>' => '<?php endfor; ?>',
        '\<\{FonkPrintF=(.*?)\}\>' => '<?php printf\\1; ?>',    
        '\<\{Fonksiyon=(.*?)\}\>' => '<?php echo \\1; ?>',    
        '\<\[\$(.*?)\=(.*?)\]\>' => '<?php \$\\1= \\2; ?>',    
        '\<\{FonkDeg=\((.*?),(.*?)\)\}\>' => '<?php \\1= \\2; ?>',    
        '\<\{FonkSade=(.*?)\}\>' => '<?php \\1; ?>',    
        '\<\{FonkKosul=(.*?)\}\>' => '\\1',    
        '\<\{sorgux\((.*?)\|(.*?)\)\}\>' => '<?php \\1X = $SQL->sorgu("\\2"); \\1 = array(); while(\\1_1 = $SQL->fetch_assoc(\\1X)): \\1[] = \\1_1; endwhile; ?>',
        '\<\{sorgu\((.*?)\|(.*?)\)\}\>' => '<?php \\1_2 = $SQL->sorgu("\\2"); \\1 = $SQL->fetch_assoc(\\1_2); ?>',            
        '\<\{sorgu\((.*?)\)\}\>' => '<?php $SORGU = $SQL->sorgu("\\1"); ?>',
        '\<\{\#(.*?)\}\>' => '<?php echo \\1; ?>',        
        '\<\{\$(.*?)\}\>' => '<?php echo $\\1; ?>',    
        '\<\{\+\+\((.*?)\)\+\+\((.*?)\)\+\+\}\>' => '<?php \\1 +=(\\2); ?>',
        '\<\{\.\.\((.*?)\)\.\.\((.*?)\)\.\.\}\>' => '<?php \\1 .=(\\2); ?>',
        '\<\{\+\+\$(.*?)\+\+\}\>' => '<?php $\\1++; ?>',
        '\<\{(.*?)\((.*?)\)\}\>' => '<?php echo \\1(\\2); ?>');

Örnek Tema Dosyası Kullanımları


Kod Çizelgesi:[Hepsini Seç] 


<{for($i=1$i count($deg2); $i++)}>
        <{$deg2[$i]}>
<{endfor}> 

<br> <!--////////////////////////////////////////////////-->

<{include=dosya.bls}> 

<br> <!--////////////////////////////////////////////////-->

 Değişkenin Çıktısı: <{$degisken}> 

<br> <!--////////////////////////////////////////////////-->

<{if( $sayi == 95 )}>
        Sonuç: <{$sayi}>
<{elseif( $sayi == 100) }>
        Sonuç: <{$sayi}>
<{else}>
        Sonuç Farklı: <{$sayi}>
<{endif}>

<br> <!--////////////////////////////////////////////////-->

<{while( list(, $deger) = each($dizi) )}>
        <b><i>While Değer:</i></b> <{$deger}><br>
<{endwhile}>

<br> <!--////////////////////////////////////////////////-->

<{foreach( $dizi as $deger )}>
        <b><i>Foreach Değer:</i></b> <{$deger}><br>
<{endforeach}>

<br> <!--////////////////////////////////////////////////-->

<{for($i=0$i count($dizi); $i++)}>
        <b><i>For Değer:</i></b> <{$dizi[$i]}><br>
<{endfor}>

<br> <!--////////////////////////////////////////////////-->

<{while( $satir mysql_fetch_assoc($sonuc) )}>
        <b><i>Başlık :</i></b> <{$satir['baslik']}><br>
<{endwhile}>


Dosyaları indirmek için tıklayınız : blstm_temamotoru_v3.zip
Yorumlar  (Toplam: 0) Sıralama:
Henüz yorum yapılmamış, ilk yorumu siz yazın.
Yorum Yaz
Onay Kodu .
 
Yücel KAHRAMAN