النتائج 1 إلى 8 من 8

الموضوع: نظام قوالب جديد من برمجتي

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555

    نظام قوالب جديد من برمجتي



    برمجت محرك قوالب بسيط تبعا لدروس استاذي ضيف الله العتيبي واستاذي حازم علي

    للسكربتات الصغيرة والحجم صغير جدا 3 كيلو بايت ::

    الكلاس

    كود PHP:
       <?php
        
    class template{
            var 
    $files        = array();
            var 
    $vars;
            var 
    $fid;
            var 
    $temp_dir;
            var 
    $cache_dir;
        
    //Function to load a template file.


        //Function to parse the Template Tags
            
    function parse(){
    //Foreach Statement
    $this->files[$this->fid] = preg_replace("'<LOOP NAME=\"(.+)\">'i","<? foreach(\$this->vars[\\1] as \$key=>\$var){ ?>",$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace("'</LOOP>'i","<? } ?>",$this->files[$this->fid]);
    //Include Statement
    $this->files[$this->fid] = preg_replace("'<INCLUDE FILENAME=\"(.+)\">'i","<? include(\"\\1\"); ?>",$this->files[$this->fid]);
    //Foreach Variables
    $this->files[$this->fid] = preg_replace("'{{(.+)}}'","<?= \$var[\\1]?>",$this->files[$this->fid]);
    //Variables
    $this->files[$this->fid] = preg_replace("'{(.+)}'","<?= \$this->vars[\\1]?>",$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace("'<else>'","<? else{ ?>",$this->files[$this->fid]);
    $this->files[$this->fid]= preg_replace('/\<if condtion\=\"(.*)\\ (.*)\\ (.*)\">/','<?if($GLOBALS[$1]$2$3){?>',$this->files[$this->fid]);
    $this->files[$this->fid]= preg_replace('/\<\/if\>/','<?}?>',$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace('/(<ELSE>|<ELSE \/>)/i','<? }else{ ?>',$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("neq","!=",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("eq","==",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("neq","!=",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("gt",">",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("lt","<",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("and","&&",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("orrrr","||",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("not","!",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("mod","%",$this->files[$this->fid]);

    }
        
    //Function to OUTPUT
            
    function print_temp($filename) {
    $this->fid "$this->cache_dir/$filename.php";
                
    $this->files[$this->fid] = file_get_contents("$this->temp_dir/$filename");

                
    $this->vars = &$GLOBALS;
                
    $this->parse();
                
    $fp fopen($this->fid,"w");
                
    fwrite($fp,$this->files[$this->fid]);
                
    fclose($fp);
                include(
    $this->fid);
            }

        }
    ?>
    طريقة الاستخدام


    تعريف الكلاس
    كود PHP:
     $tpl = new template;
        
    $tpl->temp_dir      'templates'
        
    $tpl->cache_dir      's'
    templates هو مجلد القوالب
    sهو مجلد الكاش

    لطباعة التمبلت
    كود PHP:
    $tpl->print_temp('template1.html'); 
    مع العلم ان template1.html
    هو القالب الموجود بملف القوالب
    القالب يدعم الاشارة الشرطية التضمين التكرار

    ساشرحها لاحقا

    اي افكار برمجية للقالب انا جاهز
    يجب اعطاء ملف الكلاس التصريح 777
    ويجب اعطاء الملف الذي تعرض به القالب التصريح 777
    تحياتي







  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2007
    المشاركات
    320


    اهلا عزيزي ...

    النظام جيد .. وجيد تعني عندي ممتاز ..

    لكن هناك شي احببت قوله ..

    - في preg_replace تستطيع استخدام مصفوفه بدل ان تقوم باعادتها كذا مره ..
    - لما استخدمت الاستبدال العام لكل الملف في دالة str_replace , يعني ان مثلا : يستبدل أي حرفين eq في الملف ...

    - دالة str_replace ابطئ من preg_replace قم باستخدام الثانيه ..
    - مافائده المتغير $files .. لما تريد ان تحتفظ بالمحتويات حتى بعد ظهور الصفحه وطباعتها .. اعتقد انه لافائده منه .. اكل للذاكره بلا فائده ..

    - في النهايه قلت انه يجب ان نعطي مجلد كذا وكذا التصاريح .. لماذا لاتقوم انت بالكلاس بالتأكد وطبع جمله التأكد ..
    - لما لا ترجع القيمة .. وتزيل دالة انكلود والكتابه لملف ... لانك تستخدم الكاش كاسم بلافائده ..كما ارى ..

    - الكود غير مرتب .. استخدم التاب .. لامانع من ذلك ..


    دمت بود





    __________________
    إلى اللقاء سوالف , وآسف على الإزعاج...
    moffed.com , kleeja.com/tour/ar ,phpbbarabia.com

  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555


    اهلا عزيزي ...

    النظام جيد .. وجيد تعني عندي ممتاز ..

    لكن هناك شي احببت قوله ..

    - في preg_replace تستطيع استخدام مصفوفه بدل ان تقوم باعادتها كذا مره ..
    - لما استخدمت الاستبدال العام لكل الملف في دالة str_replace , يعني ان مثلا : يستبدل أي حرفين eq في الملف ...

    - دالة str_replace ابطئ من preg_replace قم باستخدام الثانيه ..
    - مافائده المتغير $files .. لما تريد ان تحتفظ بالمحتويات حتى بعد ظهور الصفحه وطباعتها .. اعتقد انه لافائده منه .. اكل للذاكره بلا فائده ..

    - في النهايه قلت انه يجب ان نعطي مجلد كذا وكذا التصاريح .. لماذا لاتقوم انت بالكلاس بالتأكد وطبع جمله التأكد ..
    - لما لا ترجع القيمة .. وتزيل دالة انكلود والكتابه لملف ... لانك تستخدم الكاش كاسم بلافائده ..كما ارى ..

    - الكود غير مرتب .. استخدم التاب .. لامانع من ذلك ..


    دمت بود

    يا هلا استذاي sannia
    شرفني مرورك بالنسبة للمتغير كنت ناسي

    ساحذفه واعدل الموضوع


    في preg_replace تستطيع استخدام مصفوفه بدل ان تقوم باعادتها كذا مره ..

    لم افهم هذه النقطة
    اعذرني اخوك جديد بال OOP


    - في النهايه قلت انه يجب ان نعطي مجلد كذا وكذا التصاريح .. لماذا لاتقوم انت بالكلاس بالتأكد وطبع جمله التأكد ..
    - لما لا ترجع القيمة .. وتزيل دالة انكلود والكتابه لملف ... لانك تستخدم الكاش كاسم بلافائده ..كما ارى ..

    هاذي لم افهم كيف بصراحه ارجو شرحها فانا لا زلت مبتدئ :bad:






  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2007
    المشاركات
    320


    اهلين مره ثانيه ..

    preg_replace تقبل المصفوفات
    زي كذا

    كود:
    $var = preg_replace(array(..., ..., ...), array(..., ...., ...), $var);
    ايضا عشان تعرف المجلد ينكتب فيه او لا
    كود:
     if (!is_writeable($this->cache_dir))
    {
     ....
    }
    اما نقطه الارجاع اقصد كذا ..

    كود:
    function print_temp($filename) 
    { 
        ...
        ...
    $this->parse(); 
        return $this->fid;
    } 
    ليه ؟ لانك اصلا لاتستحدم الكاش جيدا .. فكل مره تقوم باعادة الكتابه له .. وهذا لايعتبر كاش .. يعتبر دوره لا فائده منها .. إما ان تستخدم الكاش .. او ترجع القيمه والسلام ..

    دمت بود





    __________________
    إلى اللقاء سوالف , وآسف على الإزعاج...
    moffed.com , kleeja.com/tour/ar ,phpbbarabia.com

  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555


    استاذي سانيا استخدمت الكاش ولكن يكتب اذا كان هناك تغييرات
    ما رايك
    كود PHP:
       <?php
        
    class template{
                   
            var 
    $vars;
            var 
    $fid;
            var 
    $temp_dir;
            var 
    $cache_dir;
        
    //Function to load a template file.


        //Function to parse the Template Tags
            
    function parse(){
    //Foreach Statement
    $this->files[$this->fid] = preg_replace("'<LOOP NAME=\"(.+)\">'i","<? foreach(\$this->vars[\\1] as \$key=>\$var){ ?>",$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace("'</LOOP>'i","<? } ?>",$this->files[$this->fid]);
    //Include Statement
    $this->files[$this->fid] = preg_replace("'<INCLUDE FILENAME=\"(.+)\">'i","<? include(\"\\1\"); ?>",$this->files[$this->fid]);
    //Foreach Variables
    $this->files[$this->fid] = preg_replace("'{{(.+)}}'","<?= \$var[\\1]?>",$this->files[$this->fid]);
    //Variables
    $this->files[$this->fid] = preg_replace("'{(.+)}'","<?= \$this->vars[\\1]?>",$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace("'<else>'","<? else{ ?>",$this->files[$this->fid]);
    $this->files[$this->fid]= preg_replace('/\<if condtion\=\"(.*)\\ (.*)\\ (.*)\">/','<?if($GLOBALS[$1]$2$3){?>',$this->files[$this->fid]);
    $this->files[$this->fid]= preg_replace('/\<\/if\>/','<?}?>',$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace('/(<ELSE>|<ELSE \/>)/i','<? }else{ ?>',$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("neq","!=",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("eq","==",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("neq","!=",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("gt",">",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("lt","<",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("and","&&",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("orrrr","||",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("not","!",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("mod","%",$this->files[$this->fid]);
    return
    $this->files[$this->fid];
    }
      FUNCTION 
    check_output($file)
      {
              if( 
    file_exists($file))
               {
                  
    $check = @fopen("$file",r);
                  
    $r     = @fread($check,filesize("$file"));
                  @
    fclose($check);

               }
             return  
    $r;

      }
        
    //Function to OUTPUT
            
    function print_temp($filename) {
    $this->fid "$this->cache_dir/$filename.php";
    $this->parse();
    $this->files[$this->fid] = file_get_contents("$this->temp_dir/$filename");
    $this->vars = &$GLOBALS;
    $this->parse();
    $html=$this->parse();
    $check$this->check_output($this->fid);
    if(
    $this->fid != $this->files[$this->fid]){
    if(
    $check != $html)
    {

    $fp fopen($this->fid,"w");
    fwrite($fp,$this->files[$this->fid]);
    fclose($fp); 

    }
    }
                include(
    $this->fid);
            }

        }
    ?>







  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    Oct 2003
    المشاركات
    549


    كنظرة سريعة شغل جميل لكن يوجد عدة ملاحظات

    ومن احدى الملاحظات

    كود PHP:
    $this->files[$this->fid]=str_replace("neq","!=",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("eq","==",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("neq","!=",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("gt",">",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("lt","<",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("and","&&",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("orrrr","||",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("not","!",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("mod","%",$this->files[$this->fid]); 
    اعتقد انه من الافضل ان لا تكون هذه الاستبدالات عامة





    __________________
    صالح المطرفي (Mr.Saphpـ)
    مدونتــــــي
    الصندوق الماسي الخامس
    قوالب WordPress
    تم بحمد الله الإنتهاء من سكربت الدروس العربي 4.0
    http://www.saphplesson.org

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555


    Mr.Saphp

    شكرا على النصائح استاذي حاولت بان اعملها داخل الاشارة فقط ولكني لم انجح
    بالفعل عندما فعلتها عامة واجهت مشكلة وهي خراب التكرار لانس استخدم foreach
    فاستبدل الor ب||فوضعتها orrrrrr
    شكرا لك استاذي
    المعذرة فانا مبتدئ






  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555


    الان لن تحتاج لتصاريح فسيعطي التصاريح بنفسه

    كود PHP:
       <?php
        
    class template{
                 
            var 
    $vars;
            var 
    $fid;
            var 
    $temp_dir;
            var 
    $cache_dir;
        
    //Function to load a template file.


        //Function to parse the Template Tags

            
    function parse(){
    //Foreach Statement
    $this->files[$this->fid] = preg_replace("'<LOOP NAME=\"(.+)\">'i","<? foreach(\$this->vars[\\1] as \$key=>\$var){ ?>",$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace("'</LOOP>'i","<? } ?>",$this->files[$this->fid]);
    //Include Statement
    $this->files[$this->fid] = preg_replace("'<INCLUDE FILENAME=\"(.+)\">'i","<? include(\"\\1\"); ?>",$this->files[$this->fid]);
    //Foreach Variables
    $this->files[$this->fid] = preg_replace("'{{(.+)}}'","<?= \$var[\\1]?>",$this->files[$this->fid]);
    //Variables
    $this->files[$this->fid] = preg_replace("'{(.+)}'","<?= \$this->vars[\\1]?>",$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace("'<else>'","<? else{ ?>",$this->files[$this->fid]);
    $this->files[$this->fid]= preg_replace('/\<if condtion\=\"(.*)\\ (.*)\\ (.*)\">/','<?if($GLOBALS[$1]$2$3){?>',$this->files[$this->fid]);
    $this->files[$this->fid]= preg_replace('/\<\/if\>/','<?}?>',$this->files[$this->fid]);
    $this->files[$this->fid] = preg_replace('/(<ELSE>|<ELSE \/>)/i','<? }else{ ?>',$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("neq","!=",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("eq","==",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("neq","!=",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("gt",">",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("lt","<",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("and","&&",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("orrrr","||",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("not","!",$this->files[$this->fid]);
    $this->files[$this->fid]=str_replace("mod","%",$this->files[$this->fid]);
    return
    $this->files[$this->fid];
    }
      FUNCTION 
    check_output($file)
      {
              if( 
    file_exists($file))
               {
                  
    $check = @fopen("$file",r);
                  
    $r     = @fread($check,filesize("$file"));
                  @
    fclose($check);

               }
             return  
    $r;

      }
        
    //Function to OUTPUT
            
    function print_temp($filename) {
    $this->fid "$this->cache_dir/$filename.php";
    $this->parse();
    $this->files[$this->fid] = file_get_contents("$this->temp_dir/$filename");
    $this->vars = &$GLOBALS;
    $this->parse();
    if (!
    is_writeable($this->cache_dir ) ) {
    $m = @chmod($this->cache_dir0777); 
    $m = @chmod('class.php'0777);
    if(
    $m){echo"تم";}
    $html=$this->parse();
    $check$this->check_output($this->fid);
    if(
    $this->fid != $this->files[$this->fid]){
    if(
    $check != $html)
    {

    $fp fopen($this->fid,"w");
    fwrite($fp,$this->files[$this->fid]);
    fclose($fp); 

    }
    }
    }else{
    $html=$this->parse();
    $check$this->check_output($this->fid);
    if(
    $this->fid != $this->files[$this->fid]){
    if(
    $check != $html)
    {

    $fp fopen($this->fid,"w");
    fwrite($fp,$this->files[$this->fid]);
    fclose($fp); 

    }
    }
    }            include(
    $this->fid);
            }

        }
    ?>
    شكرا استاذ saanina
    شكرا استاذ Mr.Saphp





    التعديل الأخير تم بواسطة exchangeboss ; 28-07-2008 الساعة 05:18 PM





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض