@@ الجزء الخامس- نظام العرض @@
------------------------------------------
مثل نظام النموذج هناك العديد من الطرق المختلفة لانشاء نظام العرض ، يمكننا استخدام كائن المسار ليقوم بتحميل ملف باسم يبدا مثلا ب view_ ثم اسم يعبر عن محتواه مثل view_delete.php
ولكن لنبقي على هذا الدرس بسيط سنقوم بانشاء كائن للقوالب بسيط جدا ليقوم بعرض القوالب .
نقوم بانشاء ملف جديد باسم template.php فى مجلد classes ثم نقوم بوضع الكود الاتي بداخله :
كود PHP:
<?php
Class Template {
private $registry;
private $vars = array();
function __construct($registry) {
$this->registry = $registry;
}
}?>
بنينا هنا الهيكل الاساسي لكائن القالب ، فى البداية انشئنا نسخة من كائن التسجيل فى المشيد وقمنا بتعريف خاصية vars والتى ستحتوي على المتغيرات وقيمها على هيئة مصفوفة ( مفتاح => قيمة )
ويكون المفتاح هو المتغير ، الان سنضيف هذا الكود فى index.php قبل الجزء الخاص بكائن المسار router
كود PHP:
$template = new Template($registry);
$registry->set ('template', $template);
قمنا هنا بانشاء نسخة من كائن القالب وبدوره سينشئ نسخة من كائن التسجيل ثم نقوم بتسجيل المتغير template وقيمته هي كائن القوالب لاستخدامه فى جميع الصفحات بشكل عام global
نحتاج الان الى وسيلة ادخال بيانات لكائن القوالب set() لتخزين المتغيرات وقيمها لتعرضها فى القوالب
ووسيلة لحذف البيانات المدخلة remove() لنقم باضافة الكود الاتي الى ملف template.php
كود PHP:
function set($varname, $value, $overwrite=false) {
if (isset($this->vars[$varname]) == true AND $overwrite == false) { $Verror='Unable to set var <font color="red"><b> '.$varname.'</b></font> Already Set !!';
die($Verror);
return false;
}
$this->vars[$varname] = $value;
return true;
}
function remove($varname) {
unset($this->vars[$varname]);
return true;
}
كما نري وسيلة الادخال set() ووسيلة الحذف remove() وسائل بسيطة جدا تستخدم لادخال البيانات وحذفها من كائن القوالب ومشابهين لعملية الادخال والحذف فى كائن التسجيل الذي سبق شرحه
الان يمكننا تخزين البيانات ، نحتاج الان الى وسيلة عرض show() لتقوم بعرض القوالب ، سنقوم بانشاء مجلد باسم templates داخل المجلد الرئيسي MVC وسيحتوي علىجميع ملفات القوالب ثم سنقوم باستخدام include() لتضمين ملفات القوالب والكود الاتي للوسيلة show() فى ملف template.php
كود PHP:
function show($name) {
$path = site_path . 'templates' . DS . $name . '.php';
if (file_exists($path) == false) {
$Terror='Template <font color="red"><b> '.$name.'</b></font> does not exist !!';
die($Terror);
}
foreach ($this->vars as $key => $value) {
$$key = $value;
}
include ($path);
}
اكتمل الان كائن القالب ويمكن استخدامه فى عرض القوالب داخل عناصر التحكم controllers
ومثال على ذلك ننشئ ملف باسم swalif.php فى مجلد templates ثم اكتب به الكود الاتي :
كود PHP:
<br /> Hello , This Is Swalif Template <br />
And I'm <?php echo $my_name; ?>
ثم قم بفتح ملف ال index.php بمجلد controllers والذي كان يحتوي على Hello Swalif فى وسيلة index
قم بوضع هذا الكود داخل وسيلة index
كود PHP:
$this->registry['template']->set ('my_name', 'Mohamed – Hawy_PHP');
$this->registry['template']->show('swalif');
فى السطر الاول قمنا بتعيين مفتاح باسم my_name وقمنا بتعيين قيمة له وهي اسمي
وبذلك استطيع ان اقوم بطباعة اسم الفتاح كمتغير ليخرج القيمة الذي قمت بتعيينها اليه
ثم فى السطر الثاني استخدمت وسيلة show لعرض القالب الذي سبقت وسميته swalif
طبعا تكتب اسمه هنا بدون الامتداد لان احنا فى وسيلة show بنضيف امتداد php يمكنك تغييره لاى امتداد
اذا الكود الكامل لوسيلة index فى عنصر التحكم index الموجود داخل controllers هو :
كود PHP:
<?php
Class Controller_Index Extends Controller_Base {
function index() {
echo 'Hello Swalif :) ';
$this->registry['template']->set ('my_name', 'Mohamed – Hawy_PHP');
$this->registry['template']->show('swalif');
}
}?>
قم بالتجربة وقم بتغيير الاسم وقم بعمل متغيرات اخري وتعيين قيم اليها ولاستخدام المصفوفات
كود PHP:
$info = array ( "Mohamed" , "Hawy_PHP" , "3/11/1990" , "ATSIT Student " ) ;
$this->registry['template']->set ('my_info', $info);
وفى صفحة القالب
كود PHP:
print_r($my_info);
وسيقوم بعرض محتويات المصفوفة ، وبهذا يكون نظام MVC البسيط انتهي ويمكن استخدامه فى انشاء اى موقع ولكن هناك نقطة يجب علينا الاهتمام بها وهي حماية ملفاتنا فكل المجلدات الفرعية التى قمنا بانشائها مثل templates و controllers متاحين للعامة ويمكنهم الاطلاع على الملفات وتشغيلها بدون تشغيلها من النظام نفسه لذللك سنمنع الوصول لهذه المجلدات باستخدام ال htaccess
سنكتب به السطر التالى
واحفظه باسم .htaccess وضعه فى اى مجلد تريد منع الوصول لملفاته
ونقطة اخري مفيدة ، الان يتم الوصول لعناصر التحكم بالشكل الاتي مثلا
http://localhost/mvc/index.php?route=links/view
ما رايكم فى جعل الوصول اليه بالشكل الاتي باستخدام mod_rewrite
http://localhost/mvc/inks/view
ضع الكود الاتي فى ملف .htaccess فى المجلد الاساسي mvc
كود PHP:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
وبهذا ينتهي هذا النظام البسيط جدا ، هناك طرق عديدة ومختلفة لبناء هذا النظام وهذه الطريقة ربما لا تكون افضلهم ولكنه يظهر لكم قوة نظام MVC .
ليس الهدف الاساسي من هذا الدرس ان تقوم ببناء نظام خاص بيك من الصفر فهذا سيتطلب جهد كبير ووقت ويمكنك فعلا استخدام ما ابتكره غيرك ويوجد العديد من اطارات العمل القوية مثل CodeIgniter
ولكن الهدف الاساسي اذا كنت فعلا تستخدم او استخدمت او تفكر فى استخدام احد هذه الاطارات
ان يكون لديك فكرة وخلفية بسيطة عن اساس عملها وهيكلها
هذا الدرس ليس من ابداعي ولكنه درس قراته وقمت بتطبيقه والحمد لله اضفت اليه الكثير و قمت ببناء اطار عمل بسيط ولكن ما يميزه عن غيره بالنسبة لي انى انا الى بنيته وفاهم كل خطوة فيه ماشية ازاى
وده تفضيل شخصي مش اكتر
والدرس ده للكاتب Dennis pallett ورابط الدرس من هنا
http://www.phpit.net/article/simple-mvc-php5/
عندما قراته وفهمته وقمت بتطبيقة وبدات بالفعل فى الاضافة اليه و بدات فى اطار العمل الخاص
فكرت فى انه ربما يفيد احد قرائته فقمت بوضعه بين ايديكم واتمني من الله ان ينال اعجابكم
واذا اردت المزيد عن كيفية عمل اطارات العمل فانصحك بقراءة هذا الدرس لراسموس والد ال PHP
http://toys.lerdorf.com/archives/38-...framework.html
مش هو بردو ابوها
وستجدوا كل الملفات والنظام كامل فى هذا الدرس فى المرفقات
وان شاء الله قريبا هنزل نسخة من النظام مع تطبيق على استخدام مكتبة ال PDO باذن الله
وبالنسبة لكلامي فوق عن( اعتماد مطوري PHP مكتبة PDO فى PHP6 مكتبة الاتصال بقواعد البيانات وتحويل الباقي الى PECL ) ليس من فراغ ولكنه من احداث اجتماع مطوري PHP فعلا لمناقشة اهم التغييرات التى ستحدث فى PHP6 مثل موضوع مكتبات قواعد البيانات السابق ذكره وحذف
ال Register_globals و الSafe_mode وال magic_quotes والكثير من التعديلات بشكل رسمي واللينك
http://www.php.net/~derick/meeting-n...nsions-to-pecl
-------------------------------
وفى النهاية فإن اصبت فمن الله عز وجل و إن أخطات فمن نفسي ومن الشيطان
اخوكم محمد ،،
لا يتبع ...