موقع نواحي

برمجة نظام القوالب

إذا كان لديك فكره برمجيه وتريد تطبيقها فلا تتردد فمن هنا ضع فكرتك



موقع نواحي    مكتبة الدروس الدروس    php php    برمجة نظام القوالب برمجة نظام القوالب

برمجة نظام القوالب
بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

القوالب هي تقييم للمبرمج فهي من تحدد سرعة البرنامج و إمكانية تصميمه و تطويره بسهوله
لأن بكل بساطه المطور و المصمم ليسوا متعمقين في البرمجه بالشكل الكافي للتعديل
و تخيل معي إن كانوا يستطيعوا ذلك فسيقوم شخص بتعديل جزء و يأتي صاحب الموقع لتغير التصميم فيأتي الاخر بتعديله أليس من المنطقي ان يحدث فقدان لأشياء داخل الملف لكثرة التعديل الغير دقيق .

الفكرة التي سنقوم بتطبيقها لصناعة المحرك

أولاً كما تكلمنا في موضوع البرمجه الكائنيه عن كيفية التخطيط لكائن تابع
البرمجة كائنيه التوجيه في الإصدار php5

الاول ما الذي اريده من المحرك
1- جلب ملف القالب
2- التأكد من ان ملف القالب لم يتم عمل تعديلات عليه
3- عمل التعديلا للقالب نفسه و هي
- ان يقوم بتغيير المتغيرات المدخله في القالب الي متغيرات عامه موجوده في النظام
- عمل نظام الشروط داخل النظام
- عمل نظام جلب الملفات
4- جلب ملف القالب المعدل من مجلد الكاش

ثانياً ما هي الخصائص التي يجب توفرها

1- متغير عبارة عن مقبض لجلب ملفات القالب
2- متغير به التعديلات التي سيقوم بها الكائن
3- متغير به اسم مجلد القوالب حتي يتم جلب منه ملفات القالب
4- متغير به اسم مجلد الكاش الذي سيتم إضافة الملفات المعدله اليه ليتم جلبه في صورة ملفات php
5- مصفوفه بها المتغيرات العامه

الاول نقوم بصناعة الكائن

<?
class template 

  
  
}
?>


نقوم بعمل الخصائص التي اتفقنا عليها

<?
class Template 

 var 
$folder 'templates';// مكان القوالب 
 
var $cache 'cache'// مجلد الكاش 
 
var $variable// مصفوفة المتغيرات العامه في النظام 
 
var $output// المخرجات 
 
var $input// المدخلات 
}
?>



الان بعد تعريف الخصائص نقوم بعمل دالة مؤسس التصنيف لنعرف فيه الاشياء الاساسيه و هي
مكان مجلد القوالب مكان مجلد الكاش
مصفوفة المتغيرات العامه


<?
// الدله تأخذ  مدخلين و هما مكان مجلد القوالب و مجلد الكاش 
  
FUNCTION __construct($temp,$cache
  { 
      
$this->folder   =  $temp;// مجلد القوالب 
      
$this->cache    =  $cache;// مجلد الكاش 
      
$this->variable =  $GLOBALS;// المتغيرات العامه 
  
}
?>


بعد تعريف الاشياء الاساسيه نقوم بعمل الوظائف التي اتفقنا عليها في اول الموضوع

الوظيفه الاولى

جلب ملف القالب و سنستخدم الداله file_get_contents

<?
// الداله تأخذ  مدخل  واحد  و هو اسم  مجلد القوالب 
  
FUNCTION inc_temp($file
  { 
    
$file="$this->folder/$file";/*استخدمنا الخاصيه فولدر التي  تحمل اسم  مكان مجلد القوالب ثم و ضعنا  اسم القالب 
*/ 
    
if(file_exists($file))// التحقق من وجود ملف  القالب قبل  جلبه 
    
$this->inputfile_get_contents($file);// جلب  الملف 
    
else 
    exit(
"<span dir='rtl' style='color:red; font-weight:bold;'>لم يتم العثو علي القالب $file</span>");// رسالة الخطأ 
    
return  $this->input;// الرجوع بمتغير يحمل ما في القالب 
  
}
?>



ثاني وظيفه هي

التأكد من ان الملف لم يتم عمل اي تغيرات عليه حتي لا يتم تحديثه دون جدوى
سنحتاج في هذه الداله فقط فتح الملف لا اكثر

و سنستخدم الداله fopen

<?
// الداله تأخذ  مدخل  واحد و هو اسم ملف  القالب داخل  مجلد الكاش 
  
  
FUNCTION check_output($file
  { 
          if( 
file_exists($file))// التأكد من وجود الملف 
           

// فتح الملف 
              
$check = @fopen("$file",r); 
              
$r     = @fread($check,filesize("$file")); 
               return  
$r;    // الرجوع بمحتوى الملف 
              
@fclose($check); 
  
           } 
  
  }
?>


ثالث وظيفه و هي تبديل الاكواد التي في ملف القالب الي اكواد php و سنحتاج الي التعامل مع التعابير القياسيه الاكثر متعه من وجهة نظري

تابع

http://www.php.net/manual/en/referen...ern.syntax.php

  FUNCTION op() 
  { 
  $this->output= preg_replace('/{(.*)}/','<?echo $this->variable['$1'];?>',$this->input);// تغير كل ما هو بين {} الي متغير عام 
  $this->output= preg_replace('/<!--include:(.*)-->/','<?$this->output('$1');?>',$this->output);/* عمل  جلب داخلي  للقوالب عن طريق دالة ouput سنعرضها بعد قليل 
*/ 
  
// تحويل كل ما هو داخل <if condition=""> الي شرط  
  $this->output= preg_replace('/<if condtion=\"(.*)\">/','<?if($1){?>',$this->output); 
// إغلاق الشرط 
  $this->output= preg_replace('/</if>/','<?}?>',$this->output); 
// الرجوع بالتعديلات كمخرجات 
  return $this->output; 
  }

بعد عمل التعديلات سنقوم بإخرجها في ملف و من ثم جلبها لتصبح قالب


<?
// الداله تأخذ  مدخل  واحد و هو اسم  ملف  القالب 
  
FUNCTION output($temp
  { 
    
$temp=str_replace('/','-',$temp);/*تحويل كل العلامه / الي - حتي  لا يتم استغلالها في  جلب ملفات خارج مجلد القوالب 
*/ 
   //جلب ملف القالب لعمل التعديلات عليه فيما بعد  
    
$this->inc_temp($temp);//استدعاء الداله inc_temp 
   // عمل التعديلات علي الملف و وضعها في  متغير html 
    
$html=$this->op();//استدعاء الداله op 
  
/* استخدام الخاصيه كاش التي تحمل اسم  مجلد الكاش و اسم الملف  المدخل حتي  نقوم  بجلبه فيما  بعد 
*/ 
    
$name="$this->cache/$temp.php"  
// فتح الملف في  مجلد الكاش للتأكد من ان الملف به  تغيرات حتي نقوم بعمل التعديلات عليه 
    
$check$this->check_output($name);// استدعاء الداله check_output 
  
// التأكد من انه يوجد اختلاف  بين المدخلات و المخرجات حتي  نقوم بالتعديل 
    
if($check != $html
    { 
// التعديل علي ملف القالب داخل الكاش بالتعديلات التي تم عملها 
         
$file = @fopen("$name",w); 
         
$w = @fwrite ($file,$html); 
         @
fclose($file); 
    } 
  
// جلب الملف من داخل مجلد الكاش 
       
include_once("$name"); 
  
  }
?>


هذه الخصائص يجب تطويرها و انصحك بتطويرها بل بإبتكار طريقه خاصه بك و لكن يجب ان تعرف الاساسيات

الان طريقة استخدام المحرك

<?
$TPL
= new template('مجلد القوالب','مجلد الكاش'); 
$TPL->output('hazem.txt');// عرض القالب
?>



الملف كامل

<?php 
class Template 

 var 
$folder 'templates'
 var 
$cache 'cache'
 var 
$variable
 var 
$output
 var 
$input
  FUNCTION 
__construct($temp,$cache
  { 
      
$this->folder   =  $temp
      
$this->cache    =  $cache
      
$this->variable =  $GLOBALS
  } 
  
  FUNCTION 
inc_temp($file
  { 
    
$file="$this->folder/$file"
    if(
file_exists($file)) 
    
$this->inputfile_get_contents($file); 
    else 
    exit(
"<span dir='rtl' style='color:red; font-weight:bold;'>لم يتم العثو علي القالب $file</span>"); 
    return  
$this->input
  } 
  
  FUNCTION 
op() 
  { 
  
$this->outputpreg_replace('/{(.*)}/','<?echo $this->variable['$1'];?>',$this->input); 
  
$this->outputpreg_replace('/<!--include:(.*)-->/','<?$this->output('$1');?>',$this->output); 
  
$this->outputpreg_replace('/<if condtion=\"(.*)\">/','<?if($1){?>',$this->output); 
  
$this->outputpreg_replace('/</if>/','<?}?>',$this->output); 
  return 
$this->output
  } 
  FUNCTION 
check_output($file
  { 
          if( 
file_exists($file)) 
           { 
              
$check = @fopen("$file",r); 
              
$r     = @fread($check,filesize("$file")); 
              @
fclose($check); 
           } 
         return  
$r
  } 
  FUNCTION 
output($temp
  { 
    
$temp=str_replace('/','-',$temp); 
    
$this->inc_temp($temp); 
    
$html=$this->op(); 
    
$name="$this->cache/$temp.php"  
    
$check$this->check_output($name); 
    if(
$check != $html
    { 
         
$file = @fopen("$name",w); 
         
$w = @fwrite ($file,$html); 
         @
fclose($file); 
    } 
  
       include_once(
"$name"); 
  
  } 
  
  

  
?>


حمّل القالب

تاريخ الإضافة تاريخ الإضافة : 15/7/2008
زيارات الصفحة زيارات الصفحة : 56
رابط ذو صلة رابط ذو صلة : http://www.traidnt.net/vb/showthread.php?t=648256
كاتب الموضوع كاتب الموضوع : حازم علي


إذا كان لديك فكره برمجيه وتريد تطبيقها فلا تتردد فمن هنا ضع فكرتك