بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
القوالب هي تقييم للمبرمج فهي من تحدد سرعة البرنامج و إمكانية تصميمه و تطويره بسهوله
لأن بكل بساطه المطور و المصمم ليسوا متعمقين في البرمجه بالشكل الكافي للتعديل
و تخيل معي إن كانوا يستطيعوا ذلك فسيقوم شخص بتعديل جزء و يأتي صاحب الموقع لتغير التصميم فيأتي الاخر بتعديله أليس من المنطقي ان يحدث فقدان لأشياء داخل الملف لكثرة التعديل الغير دقيق . الفكرة التي سنقوم بتطبيقها لصناعة المحرك أولاً كما تكلمنا في موضوع البرمجه الكائنيه عن كيفية التخطيط لكائن تابع
البرمجة كائنيه التوجيه في الإصدار php5 الاول ما الذي اريده من المحرك
1- جلب ملف القالب
2- التأكد من ان ملف القالب لم يتم عمل تعديلات عليه
3- عمل التعديلا للقالب نفسه و هي
- ان يقوم بتغيير المتغيرات المدخله في القالب الي متغيرات عامه موجوده في النظام
- عمل نظام الشروط داخل النظام
- عمل نظام جلب الملفات
4- جلب ملف القالب المعدل من مجلد الكاش ثانياً ما هي الخصائص التي يجب توفرها 1- متغير عبارة عن مقبض لجلب ملفات القالب
2- متغير به التعديلات التي سيقوم بها الكائن
3- متغير به اسم مجلد القوالب حتي يتم جلب منه ملفات القالب
4- متغير به اسم مجلد الكاش الذي سيتم إضافة الملفات المعدله اليه ليتم جلبه في صورة ملفات php
5- مصفوفه بها المتغيرات العامه الاول نقوم بصناعة الكائن
الان بعد تعريف الخصائص نقوم بعمل دالة مؤسس التصنيف لنعرف فيه الاشياء الاساسيه و هي
مكان مجلد القوالب مكان مجلد الكاش
مصفوفة المتغيرات العامه
ثاني وظيفه هي التأكد من ان الملف لم يتم عمل اي تغيرات عليه حتي لا يتم تحديثه دون جدوى
سنحتاج في هذه الداله فقط فتح الملف لا اكثر و سنستخدم الداله fopen
بعد عمل التعديلات سنقوم بإخرجها في ملف و من ثم جلبها لتصبح قالب
الملف كامل
لأن بكل بساطه المطور و المصمم ليسوا متعمقين في البرمجه بالشكل الكافي للتعديل
و تخيل معي إن كانوا يستطيعوا ذلك فسيقوم شخص بتعديل جزء و يأتي صاحب الموقع لتغير التصميم فيأتي الاخر بتعديله أليس من المنطقي ان يحدث فقدان لأشياء داخل الملف لكثرة التعديل الغير دقيق . الفكرة التي سنقوم بتطبيقها لصناعة المحرك أولاً كما تكلمنا في موضوع البرمجه الكائنيه عن كيفية التخطيط لكائن تابع
البرمجة كائنيه التوجيه في الإصدار 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; // المدخلات
}
{
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 __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 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 و سنحتاج الي التعامل مع التعابير القياسيه الاكثر متعه من وجهة نظري
تابع
http://www.php.net/manual/en/referen...ern.syntax.phpFUNCTION check_output($file)
{
if( file_exists($file))// التأكد من وجود الملف
{
// فتح الملف
$check = @fopen(\"$file\",r);
$r = @fread($check,filesize(\"$file\"));
return $r; // الرجوع بمحتوى الملف
@fclose($check);
}
}
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;
}
{
$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\");
}
هذه الخصائص يجب تطويرها و انصحك بتطويرها بل بإبتكار طريقه خاصه بك و لكن يجب ان تعرف الاساسيات
الان طريقة استخدام المحرك
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\');// عرض القالب
$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\");
}
}
?>
حمّل القالب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\");
}
}
?>
التعليقات على المقالة 2
محمد 15/8/2014
مبدع
رد
محمد 4/11/2013
رد