القوالب هي تقييم للمبرمج فهي من تحدد سرعة البرنامج و إمكانية تصميمه و تطويره بسهوله
لأن بكل بساطه المطور و المصمم ليسوا متعمقين في البرمجه بالشكل الكافي للتعديل
و تخيل معي إن كانوا يستطيعوا ذلك فسيقوم شخص بتعديل جزء و يأتي صاحب الموقع لتغير التصميم فيأتي الاخر بتعديله أليس من المنطقي ان يحدث فقدان لأشياء داخل الملف لكثرة التعديل الغير دقيق .
الفكرة التي سنقوم بتطبيقها لصناعة المحرك
الاول ما الذي اريده من المحرك
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;// المتغيرات العامه
}
بعد تعريف الاشياء الاساسيه نقوم بعمل الوظائف التي اتفقنا عليها في اول الموضوع
// الداله تأخذ مدخل واحد و هو اسم مجلد القوالب
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);/* عمل جلب داخلي للقوالب عن طريق دالة 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; }
عدد مرات مشاهدة المقاله :
(344)
تاريخ النشر :
(26-06-2008 08:56 مساء)
التعليقات
إضافة تعليق
مقالات أخرى من دروس متقدمه
التحميل التلقائي للكائن في الاصدار php 5
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في بعض الاوقات اثناء عملنا علي احد المشاريع الكبيره المكونه من عدة كائنات قد نتسائل أهل يجب علينا عمل جلب لكل ملفات الكائنات ؟ فكانت الاجابه نعم الي ان جائت ال php 5
بهذه الداله الرائعه autoload لتجعل عملية جلب الكائن اليه و ليست يدويه .
و من مميزات هذه الداله ليست داله للأستخدام المباشر بل بإمكانك التعديل و التحكم فيها كما تشاء
تكتب الداله هكذا
[php]
function __autoload($className)
{
//هو اسم الكائن الذي سيتم جلبه className المتغير
#هنا نضع محتويات ..
كائن [phpcolor] لتلوين اكواد Php
بسم الله الرحمن الرحيم
كائن php color يقوم بتلوين اكواد البي اتش بي
طريقة الاستخدام
[php]
[/php]
مثال علي الكائن
http://egyplus.org/article-3.htm
للتحميل من
هتا
تحياتي للجميع
حازم ..
الاستثنئات (Exceptions)
بسم الله الرحمن الرحيم
لا أحب المقدمات فلندخل في صلب الموضوع لنتعرف علي الاستثنئات إحدى روائع ال php
أول حاجه يا جماعة الاستثنئات خاصية تسمح للمبرمج بإستخراج رسائل انت تحددها من خلال الدوال و هي مفيدة في إكتشاف أخطاء برامجنا و جلب مكان العطل
توضيح أكثر مثلاً قمنا بعمل دالة للقيام بعملية قسمه ثم تقريبها و بعد ذلك اردنا عند عدم إمكانية القسمه طباعة هذه الجمليه
(هناك خطأ في قيمة أحد المدخلات )
مثال علي هذه الداله
رمز PHP:
function example($num,$num2)
{
$num = round($num/$num2);
}
الان نريد ..