بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
القوالب هي تقييم للمبرمج فهي من تحدد سرعة البرنامج و إمكانية تصميمه و تطويره بسهوله
لأن بكل بساطه المطور و المصمم ليسوا متعمقين في البرمجه بالشكل الكافي للتعديل
و تخيل معي إن كانوا يستطيعوا ذلك فسيقوم شخص بتعديل جزء و يأتي صاحب الموقع لتغير التصميم فيأتي الاخر بتعديله أليس من المنطقي ان يحدث فقدان لأشياء داخل الملف لكثرة التعديل الغير دقيق .
الفكرة التي سنقوم بتطبيقها لصناعة المحرك
أولاً كما تكلمنا في موضوع البرمجه الكائنيه عن كيفية التخطيط لكائن تابع
البرمجة كائنيه التوجيه في الإصدار php5
الاول ما الذي اريده من المحرك
1- جلب ملف القالب
2- التأكد من ان ملف القالب لم يتم عمل تعديلات عليه
3- عمل التعديلا للقالب نفسه و هي
- ان يقوم بتغيير المتغيرات المدخله في القالب الي متغيرات عامه موجوده في النظام
- عمل نظام الشروط داخل النظام
- عمل نظام جلب الملفات
4- جلب ملف القالب المعدل من مجلد الكاش
ثانياً ما هي الخصائص التي يجب توفرها
1- متغير عبارة عن مقبض لجلب ملفات القالب
2- متغير به التعديلات التي سيقوم بها الكائن
3- متغير به اسم مجلد القوالب حتي يتم جلب منه ملفات القالب
4- متغير به اسم مجلد الكاش الذي سيتم إضافة الملفات المعدله اليه ليتم جلبه في صورة ملفات php
5- مصفوفه بها المتغيرات العامه
الاول نقوم بصناعة الكائن
نقوم بعمل الخصائص التي اتفقنا عليها
الان بعد تعريف الخصائص نقوم بعمل دالة مؤسس التصنيف لنعرف فيه الاشياء الاساسيه و هي
مكان مجلد القوالب مكان مجلد الكاش
مصفوفة المتغيرات العامه
بعد تعريف الاشياء الاساسيه نقوم بعمل الوظائف التي اتفقنا عليها في اول الموضوع
الوظيفه الاولى
جلب ملف القالب و سنستخدم الداله file_get_contents
ثاني وظيفه هي
التأكد من ان الملف لم يتم عمل اي تغيرات عليه حتي لا يتم تحديثه دون جدوى
سنحتاج في هذه الداله فقط فتح الملف لا اكثر
و سنستخدم الداله fopen
ثالث وظيفه و هي تبديل الاكواد التي في ملف القالب الي اكواد php و سنحتاج الي التعامل مع التعابير القياسيه الاكثر متعه من وجهة نظري
تابع
https://www.php.net/manual/en/referen...ern.syntax.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->input= file_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 و سنحتاج الي التعامل مع التعابير القياسيه الاكثر متعه من وجهة نظري
تابع
https://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->input= file_get_contents($file);
else
exit("<span dir='rtl' style='color:red; font-weight:bold;'>لم يتم العثو علي القالب $file</span>");
return $this->input;
}
FUNCTION op()
{
$this->output= preg_replace('/\{(.*)\}/','<?echo $this->variable[\'$1\'];?>',$this->input);
$this->output= preg_replace('/\<\!\-\-include:(.*)\-\-\>/','<?$this->output(\'$1\');?>',$this->output);
$this->output= preg_replace('/\<if condtion\=\"(.*)\">/','<?if($1){?>',$this->output);
$this->output= preg_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");
}
}
?>حمّل القالب


