مجتمع سوالف سوفت: شكل ومفهوم جديد للمنتديات
من الموقع: Synaptics, لكي نرفع القبعة !! .. الآن اجعل حاسبك المحمول يدعم اللمس المتعدد في دقيقة واحدة !!

 

العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > PHP
المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#1  
[ درس متقدم ] كيفية بناء نظام MVC بسيط PHP5


- بسم الله الرحمن الرحيم -

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

كنت وضعت فى توقيعي ان هناك هدية ( صغيرة ) لمطوري ال PHP5 وها هي بين ايديكم

كيف تبني نظام ( Model – Controller – View )

المعروف ب MVC و ( المستخدم فى جميع اطارات العمل FrameWorks )

باستخدام PHP5 و أحد خصائص SPL ) Standard PHP Library )

وهي مكتبة تحتوي على مجموعة من الواجهات و الكائنات لحل بعض المشاكل القياسية

تحتاج لتطبيق هذا الدرس توفر نسخة PHP5 و مكتبة SPl المضافة افتراضيا فى نسخة PHP 5

* انصحك باستخدام Xampp 1.6.3a - يحتوي على نسخة PHP 5.2.3

وستجد هنا درس تسطيب xampp للاخ الفاضل اشرف السمهوري

وان يكون لديك خلفية ولو بسيطة عن البرمجة الكائنية والوراثة

فى هذا الدرس ستتعلم ما هي اساسيات اى نظام MVC اكثر نمط تصميم شيوعا لتطبيقات الويب الكبيرة

وكيف تبني اساس هذا النظام من الصفر وكيفية التعامل معه .

@@ الجزء الاول – المقدمة و نقطة اساس النظام @@
------------------------------------------------------------
لنبدا بتوضيح احد اساسيات هذا النظام وهي ( صفحة واحدة تعالجنا { كلنا } )

- هما مين { كلنا } دول

اقولك انا دول كل العمليات الى هيتم معالجتها لاظهار المحتوي الذي تريده

فبدلا من ان تضع هذا السطر فى كل صفحة

كود PHP:
<?php
include ("Global.php");
// بقية محتويات الكود الخاص بهذا الملف 
?>
سيكون عندنا صفحة تقوم بمعالجة كل العمليات لعرض المطلوب أى اننا لن نكون بحاجة لادراج ملف global.php مثلا فى كل ملف جديد نقوم بعمله

سنقوم الان ببداية التطبيق ، قم بعمل مجلد فارغ وليكن MVC ثم انشئ ملف فارغ باسم index.php

الان سنقوم بعمل بعض المهام التى سنحتاجها فى بداية معالجة العمليات ، قم بعمل مجلد includes
وانشئ ملف startup.php بداخله
ثم قم باضافة السطر التالى لملف ال index.php
كود PHP:
include_once("includes/startup.php"); 
@ ------ نهاية الجزء الاول ----- @ يتبع ..






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 04:41 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#2  

@@ الجزء الثاني - مهام البدء و كائن التسجيل @@
-----------------------------------------------------------

الجزئية الاولي - مهام البدء :
---------------------------------
ملف البداية يستخدم فى القيام ببعض مهام بداية التنفيذ العامة مثل تعريف الثوابت ،
و تحديد مستوي الاخطاء المراد تفعيلها ، الحصول على المسار الخاص بالاطار

سيكون الجزء الاول من ملف البداية startup.php بهذا الشكل
كود PHP:
<?php

error_reporting 
(E_ALL);

$ver_error=' Sorry <br /> <h1> PHP 5 Only  !! </h1>' ;

if (
version_compare(phpversion(), '5''<') == true) { die ($ver_error); }

define ('DS'DIRECTORY_SEPARATOR);

$sitepath realpath(dirname(__FILE__) . DS '..' DS) . DS

define ('site_path'$sitepath);
فى السطر الاول قمنا باعداد مستوي الاخطاء لاظهار جميع الاخطاء
لمزيد عن الاخطاء درس الاخطاء فى لغة PHP للاخ الفاضل أشرف السمهوري
http://www.tm-world.net/forum/showthread.php?t=462

ثم فى السطر الثاني قمنا بتنسيق رسالة تحذيرية لعرضها فى حالة عدم استخدام PHP5
نظرا لان النظام يعتمد بشكل اساسي على بعض ادوات SPL المتوفرة فى PHP5 فقط

فى السطر الثاالث نقوم بالتاكد من نسخة ال PHP اذا كانت اقل من 5 نقوم بايقاف التنفيذ
مع اظهار الرسالة السابق تنسيقها فى السطر الثاني

فى السطر الرابع نقوم بعمل ثابت DS يحتوي على فاصل الادلة DIRECTORY_SEPARATOR
وهو الباك سلاش [ \ ] لاختصار كتابته ليس اكثر

فى السطر الخامس نقوم بالحصول على مسار الموقع الحقيقي بهذه الطريقة
نقوم فى البداية بمعرفة اسم المجلدdirname للملف الحالى __FILE__ وهو فى حالتنا هنا startup.php
وسيكون اسم المجلد هو includes ثم نضيف \ ثم ال .. ليخرجونا للمجلد الاعلي من includes
وهو المجلد الرئيسي لنا MVC كما ذكرنا سابقا عند انشاء index.php

فى السطر السادس نقوم بعمل ثابت site_path يحتوي على قيمة المتغير المحتوي على مسار المجلد الرئيسي فى السطر الخامس $sitepath ليصبح عندنا الثابت site_path به مسار المجلد الرئيسي

كل ما فى هذا الملف سيتم تنفيذه فى بداية اى تنفيذ لاى ملف فى النظام .

يتبع بالجزئية الثانية من الجزء الثاني ...






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 04:45 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#3  

الجزئية الثانية – كائن التسجيل :
------------------------------------
الجزء القادم هو احتياجنا لكائن تسجيل يقوم باحتواء كل البيانات العامة على النظام باكمله

هذا الكائن سيضمن داخل كل الكائنات المستقلة الاخري فى النظام ويستخدم لنقل البيانات العامة فى مختلف انحاء النظام بدون الاحتياج لاستخدام المتغير المسبق التعريف $GLOBALS

سنقوم بانشاء الكائن ( الكلاس ) هذا فى ملف خارجي وسنقوم باستدعائه ببساطة باستخدام include()
ولكن هيا نستخدم واحدة من روائع PHP5 الجديدة وهي الدالة [ __autoload() ]

هذه الدالة الساحرة تستخدم لتحميل الكائنات ( الكلاسات ) ، عندما تصادف PHP كائن غير موجود
فتقوم اولا باستدعاء الدالة __autoload() ، ثم تقوم بالاعلان عن خطا اذا لم يكن موجودا .

لنقم باضافة الكود الاتي الى ملف startup.php
كود PHP:
function __autoload($class_name
{
        
$filename strtolower($class_name) . '.php';

        
$file site_path 'classes' DS $filename

        if (
file_exists($file) == false
        { 
           return 
false;
        }

        include (
$file);

تاخذ الدالة اسم الكلاس كمعطي لها ، ثم تتاكد من وجود ملف له نفس الاسم بداخل مجلد الكائنات الذي نقوم بعمله وتسميته مثلا classes . اذا لم تجد الملف الدالة سوف تقوم بايقاف التنفيذ واظهار خطا قاتل fatal error يتم ايضاح فيه ان االكلاس ( اسم الكلاس ) غير موجود ،
واذا وجدت الملف ستقوم الدالة بتضمينه بواسطة include()

@@ انشاء كائن التسجيل :
-------------------------------
كائن التسجيل كما قلنا سابقا فهو يضمن داخل كل الكائنات المستقلة الاخري ويقوم بنقل البيانات العامة فى مختلف انحاء النظام ، وهو كائن (كلاس) بسيط جدا ، ولا يحتاج اكثر من ثلاثة اساليب (نهج) methods.

اولا نقوم بانشاء مجلد واسمه [ classes ] ثم نقوم بانشاء ملف جديد ونسميه [ regisrty.php ]
ونضع الكود الاتي بداخله
كود PHP:
<?php
class Registry {
    private 
$vars = array();
}
?>
فى هذا السطر قمنا بانشاء الكائن ووضع خاصية vars على شكل مصفوفة وهي التى ستحوي البيانات التي سنقوم بتخزينها من خلال الكائن .
نحن الان قمنا بعمل هيكل لكائن التسجيل ( Registry Class ) ، و كل ما نريد فعله هو اضافة بعض الاساليب ( النهج ) ، جميع كائنات التسجيل تحتاج الى اسلوب تخزين set() لتخزين البيانات ،
واسلوب الإستخراجget() للحصول على البينات المخزنة ، ويمكننا ايضا اضافة اسلوب الحذف remove() ليقوم بحذف بعض البيانات المخزنة بالكائن ، سنضيف الكود الاتي الخاص بهذه الاساليب داخل الكائن :
كود PHP:
function set($key$var) {
     if (isset(
$this->vars[$key]) == true) {
$error='Unable to set var <font color="red"><b> '.$key.'</b></font> Already Set  !!';
 die(
$error);
        } 
        
$this->vars[$key] = $var;
        return 
true;
}
function 
get($key) {
        if (isset(
$this->vars[$key]) == false) {
                return 
null;
        }
        return 
$this->vars[$key];
}
function 
remove($var) {
        unset(
$this->vars[$key]);

الاساليب بسيطة جدا كل الى بتقوم بيه ( تخزن ، تستخرج و تحذف ) البيانات من خاصية$var ، فى اسلوب التخزين set() نقوم ايضا بالتاكد اذا كان مفتاح البيانات المدخلة موجود من قبل ام لا ، فاذا كان موجود نقوم بالخروج من البرنامج واظهار خطا وهذا يحمي من الكتابة على البيانات الموجودة من قبل [ Overwriting ] .

نحن الان بنينا كائن تسجيل كامل ولكن سنقوم باستخدام احد واجهات (وصلات) SPL وهي[ ArrayAccess]
وتعمل على الوصول للكائن بطريقة المصفوفات ، لاحظ الكود الاتي ولا تضيفه [ يعتمد على الكائن السابق] :
كود PHP:
<?php
$registry 
= new Registry;
$registry->set 'site' 'swalif.net' ) ;

$registry->get ('site'); 

$registry['site'];
 
?>
فى السطر الاول نقوم بتعريف نسخة من كائن التسجيل ،
فى السطر الثاني نقوم بادخال مفتاح site وقيمته swalif.net

فى السطر الثالث نقوم بالحصول على قيمة المفتاح site باستخدام اسلوب الاستخراج get()

اما فى السطر الرابع فهو المقصود وهو نفس عمل السطر الثالث ( الحصول على قيمة المفتاح site ) ولكن باستخدام ال ArrayAccess فهي تتعامل مع $registry كانه مصفوفة فى حين انه كائن ،
و ال ArrayAccess لا تمتلك مميزات حقيقية ، هي فقط تختصر الكتابة بدلا من انك تستخدم ->get()،
لاستخدام ال ArrayAccess يجب علينا تغيير السطر الخاص بتعريف الكلاس وهو

كود PHP:
class Registry 
ليصبح
كود PHP:
Class Registry Implements ArrayAccess 
الكلمة المفتاحية [ Implements ] تستخدم لتفيذ واجهة ( وصلة ) interface مثل ال ArrayAccess

بتنفيذ ArrayAccess يجب اضافة اربع اساليب جديدة ثابتة للكائن معرفة مسبقا من خلال SPL
قم باضافتهم اسفل الثلاث اساليب السابق ذكرهم
كود PHP:
function offsetExists($offset) {
        return isset(
$this->vars[$offset]);

function 
offsetGet($offset) {
        return 
$this->get($offset);
}
function 
offsetSet($offset$value) {
        
$this->set($offset$value);
}
function 
offsetUnset($offset) {
        unset(
$this->vars[$offset]);

هذه الاساليب تشرح نفسها فالاولي تقوم بالتحقق من وجود المتغير والثانية تقوم باستخراج المتغير
والثالثة تقوم بادخال المتغير وقيمته والرابعة تقوم بالحذف
وللمزيد عنهم http://www.php.net/~helly/php/ext/sp...rayAccess.html
وللمزيد عن ال SPL بصفحة عامة http://www.php.net/manual/en/ref.spl.php
والمانوال الخاص باستخدامها وتشعباتها http://www.php.net/~helly/php/ext/spl/

بعد ان قمنا باستكمال كائن التسجيل واضافة واجهة ArrayAccess فان طريقة ادخال البيانات واستخراجها
اصبحت بالشكل التالي
كود PHP:
$registry->set ('name','mohamed');
$registry['name'] = 'mohamed' ;
echo 
$registry->get ('name');
echo 
$registry['name']; 
السطر الاول – ادخال البيانات بالطريقة العادية
السطر الثاني - ادخال البيانات باستخدام Array Access
السطر الثالث - استخراج البيانات بالطريقة العادية
السطر الرابع - استخراج البيانات باستخدام Array Access
------
يبقي الان اضافة هذا السطر فى نهاية ملف startup.php السالف ذكره ( بعد دالة autoload )
كود PHP:
$registry = new Registry
انتهينا من كائن التسجيل واذا حاولت تجربة النظام فسيعمل بدون اخطاء ( ولكن لن يعرض شئ )
@ ------ نهاية الجزء الثاني ----- @

يتبع بالجزء الثالث






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 04:47 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#4  

@@ الجزء الثالث – النموذج The Model @@
--------------------------------------------------

[M] او Model هو جزء من MVC مسئول عن الاستعلام عن البيانات المراد عرضها من قاعدة البيانات او من اى مصدر اخر ثم يقوم بتقديمها للمتحكم Controller ، ويجب علينا ان نحصل على النموذج المناسب للطلب المقدم من المستخدم ولكن هنا سنقوم بطمس الفرق بين النموذج والمتحكم ، حيث يستخدم المتحكم مكتبة اتصال بقاعدة بيانات للاستعلام مباشرة من قاعدة البيانات بدلا من العديد من النماذج المختلفة فلذلك لن نتضمن النماذج فى نظامنا بشكل رسمي واذا استطعت ان تفهم فكرة عمل المتحكم عند شرحة فى الجزء الرابع سيمكنك ( اذا احببت ) القيام باضافة النماذج بنفس الطريقة .

سنقوم هنا باضافة كود الاتصال بقاعدة البيانات لصفحتنا الرئيسية index.php داخل المجلد MVC
يمكنك استخدام مكتبات الاتصال بقواعد البيانات المختلفة ولكن PHP5 ياتي معها مكتبة اتصال بقواعد البيانات قوية وهي [ PDO ] وساقوم باستخدامها هنا نظرا لوجود اتجاه رسمي من مطوري PHP لازالة اى مكتبات اتصال بقواعد البيانات غير PDO مثل [ OCI8 and MySQLi ] من الوضع الافتراضي واحالتهم الى PECL فى PHP6 واعتماد PDO بشكل رسمي كمكتبة الاتصال بقواعد البيانات فى PHP6 ،

قوم باضافة هذا الكود الي index.php اذا كنت ستستخدم PDO واذا لم تريد استخدامها فقم باضافة كود الاتصال الخاص بالمكتبة التى تنوي استخدامها Mysqli ] [ مثلا :
كود PHP:
$db = new PDO('mysql:host=localhost;dbname=demo''[user]''[password]');
$registry->set ('db'$db); 
فى السطر الاول قمنا بعمل مقبض اتصال بقاعدة بيانات من نوع MySql باستخدام pdo
قم بتغيير demo الى اسم القاعدة و user الى اسم المستخدم و password الى كلمة السر

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

فبهذه الاضافة البسيطة نكون انهينا جزء النموذج الذي اتفقنا عليه بان لا يكون نماذج مختلفة فى درسنا هذا
وسنبدا باضافة المتحكم Controller واضافة المتحكم هذه تعني اننا بحاجة لكائن المسارات المسئول عن تحميل المتحكم controller المطلوب من خلال المستخدم عن طريق الرابط

@ - كائن المسار Router :
------------------------------ سيقوم هذا الكائن بتحليل الطلب القادم من المستخدم ثم تحميل المتحكم الصحيح للبدء بعرض المطلوب عرضه ، الخطوة الاولي هي عمل الهيكل الاساسي لكائن المسار واضافته فى ملف router.php بمجلد classes السابق انشائه وموجود به registry.php :
كود PHP:
Class Router {
        private 
$registry;
        private 
$path

        function 
__construct($registry) {
                
$this->registry $registry;
        }       

قمنا هنا ببناء هيكل كائن المسار وتحديد 3 خواص
خاصية التسجيل وستحتوي على كائن التسجيل المسبق انشاؤه ، خاصية المسار وستحتوي علىالمسار الكامل للمتحكم ثم نقوم ببناء المشيد الذي ياخذ كائن التسجيل كمعطي ثم يقوم بتعيينه لخاصية التسجيل

قم الان باضافة الكود الاتي الى صفحة index.php للقيام بتحميل كائن المسار
كود PHP:
$router= new Router($registry);
$registry['router'] =  $router 
فى السطر الاول قمنا بعمل نسخة من كائن المسار فى متغير router
ثم قمنا بتسجيل قيمة المتغير router بالمفتاح router فى كائن التسجيل ليكون المتغير router عام ويمكن استخدامه بجميع الصفحات وهو يحوي بداخله نسخة من كائن المسار

لنقوم باضافة الوسائل الاساسية فى كائن المسار ، اول وسيلة هي وسيلة setPath() ، والتي تستخدم لتحديد الدليل ( المجلد ) الذي سيحوي جميع عناصر التحكم controllers وسنقوم الان باضافتها الى ملف router.php داخل الكائن router من الكود الاتي :
كود PHP:
 function setPath($path
{
$path trim($path'/\\');
        
$path .= DS;

if (
is_dir($path) == false) {
        
$perror'Invalid controller path '.$path;
        die(
$perror);
        }

        
$this->path $path;

لنرجع الان الى ملف index.php ونقوم باضافة السطر التالى لتحديد مسار مجلد عناصر التحكم controllers
كود PHP:
$router->setPath(site_path.'controllers'); 
وبهذا نكون قد قمنا بتحديد مسار مجلد عناصر التحكم ، سنكتب الان الوسيلة المسئولة عن تحميل عنصر التحكم المطلوب وهي وسيلة loading() وستقوم بتحليل الطلب القادم من المستخدم
الجزئية الاولي من هذه الوسيلة كالاتي :
كود PHP:
function loading(){
        
$this->getController($file,$controller,$action); 
كما نري فان وسيلة التحميل loading() تستخدم وسيلة اخري وهي getController() للحصول على اسم عنصر التحكم واذا تم طلب تنفيذ دالة داخله والكود الاتي هو وسيلة getController()
كود PHP:
private function getController(&$file, &$controller, &$action) {
        
$route = (empty($_GET['route'])) ? '' $_GET['route']; 
        if (empty(
$route)) { $route 'index'; }
        
        
$route trim($route'/\\');
        
$parts explode('/'$route);

        
$cmd_path $this->path;
        foreach (
$parts as $part) {
               
$fullpath $cmd_path $part;
                        
                if (
is_dir($fullpath)) {
                        
$cmd_path .= $part DS;
                        
array_shift($parts);
                        continue;
                }

                if (
is_file($fullpath '.php')) {
                        
$controller $part;
                        
array_shift($parts);
                        break;
                }
        }
        if (empty(
$controller)) { $controller 'index'; };

        
$action array_shift($parts);
        if (empty(
$action)) { $action 'index'; }
        
$file $cmd_path $controller '.php';

فى هذه الوسيلة تاخذ اولا قيمة المتغير $route ثم تقوم بتقسيمه الى اجزاء منفصلة باستخدام دالة explode() فاذا كان الطلب ( links/view ) فستقوم بتقسيمه الى مصفوفة array('links','view')

ثم نقوم باستخدام حلقة تكرار foreach لاستخراج القيم من المصفوفة كل على حدي ثم التاكد من كونه مجلد ، فاذا كان مجلد نقوم باضافته الى مسار الملف ثم ننتقل للجزء التالي من المصفوفة مع حذف الجزء الذي يمثل مجلد من المصفوفة باستخدام array_shift وهكذا ، هذا يتيح لنا استخدام مجلدات فرعية داخل المجلد الرئيسي لعناصر التحكم controllers واذا كان الجزء التالي ليس مجلد ولكنه ملف نقوم بتعيين هذا الجزء لمتغير $controller ونحذف عنصر الملف من المصفوفة ثم نخرج من الحلقة لحصولنا على ملف عنصر التحكم المنشود ، بعد الحلقة نتاكد من ايجاد عنصر التحكم فاذا لم يتم ايجادة نقم باستخدام الافتراضي وتعيين القيمة الافتراضية ونطلق عليها هنا index الى $controller ثم نقوم بالحصول على الوسيلة المطلوبة الموجودة داخل عنصر التحكم ، فعنصر التحكم هو كائن يتكون من مجموعة وسائل مختلفة والمتغير action يشير الى الوسيلة المطلوبة من خلال المستخدم واذا لم نجد وسيلة تم تحديدها فنقوم بارجاع الوسيلة الافتراضية index وفى النهاية نقوم بتجميع المسار الكامل لملف عنصر التحكم ( المسار و اسم عنصر التحكم و الامتداد ) ، الان الطلب تم تحليله داخل الوسيلة الحاملة له وهي loading() فتقوم بتحميل عنصر التحكم و تنفيذ الوسيلة المطلوبة ، الكود الاتي يمثل وسيلة loading() كاملة بملف router.php :



كود PHP:
function loading() { 
        
$this->getController($file$controller$action); 
      
  if (
is_readable($file) == false) {
                die (
'404 File Not Found');
        }

        include (
$file);
        
$class 'Controller_' $controller;
        
$controller = new $class($this->registry);

        if (
is_callable(array($controller$action)) == false) {
                die (
'404 Action Not Found');
        }
        
$controller->$action();

فى السطر الاول نقوم باستدعاء وسيلة الحصول على عنصر التحكم وتم شرحها مسبقا
ثم نتاكد من ملف عنصر التحكم موجود بالفعل فاذا كان موجود نقوم بتضمينه include واذا لم يكن نخرج رسالة خطا ثم نقوم بتعريف الكلاس بسابقة Controller ثم اسم الملف ثم نقوم بعمل نسخة من الكلاس لاستخدامها فى اخراج الوسيلة المطلوبة وبعد ذلك نقوم بالتاكد من ان الوسيلة المطلوبة هي دالة يمكن تفيذها داخل كائن عن طريق ادخالهم على شكل مصفوفة ثم تنفيذها واذا لم تكن نخرج رسالة خطا
والان اكتملت وسيلة التشغيل الاساسية loading() سنقوم باضافة السطر الاتي الى نهاية index.php
كود PHP:
$router->loading (); 
سننتقل الان الى عناصر التحكم Controllers

@ ------ نهاية الجزء الثالث ----- @

يتبع ....






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 04:49 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#5  

@@ الجزء الرابع – عنصر التحكم Controller @@
-------------------------------------------------------
هذا الجزء بسيط جدا ، فى البداية نقوم بعمل المجلد السابق اشارة اليه controllers ليحوي جميع عناصر التحكم ثم نقوم بانشاء ملف جديد باسم controller_base.php بداخل مجلد classes السابق انشاؤه
ثم نضع بداخل هذا الملف controller_base.php الكود الاتي
كود PHP:
<?php 
Abstract Class Controller_Base {
        protected 
$registry;
        function 
__construct($registry) {
                
$this->registry $registry;
        }
        abstract function 
index();
}
?>
الكائن ده هيبقي هو الاب parent لكل كائنات عناصر التحكم الى هننشئها بعد كده وهو يقوم بانشاء نسخة من كائن التسجيل مرة واحدة حتي لا نقوم بنسخها فى كل عنصر تحكم انما ننشئها هنا مرة واحدة و عن طريق الوراثة ستعمم لكل كائنات عناصر التحكم الاخري و قمنا بجعله abstract و انشئنا وسيلة index وجعلناها abstract بحيث ان اى كائن هيورث من الكائن ده لازم يعرف الوسيلة index ولازم يعرفها فى نفس مستوي الظهور او اقل منه يعني لو عملنا الوسيلة index بمستوي protected يجب فى الكائنات الوارثة ان نقوم بتعريفها protected ايضا او public لكن لا يجوز تعريفها private وفائدة جعل هذه الوسيلة abstract هو ضمان احتواء كل كائن عنصر تحكم على وسيلة index .

سنقوم الان بانشاء اول عنصر تحكم قم بانشاء ملف باسم index.php داخل المجلد controllers وقم باضافة الكود الاتي اليه :
كود PHP:
<?php 
Class Controller_Index Extends Controller_Base {
        function 
index() {
                echo 
'Hello Swalif :) ';
        }
}
?>
فبذلك قمنا بانشاء اول كائن عنصر تحكم ولاحظ بالسطر الاول تقوم بكتابة controller_ ثم اسم عنصر التحكم والذي سيكون على نفس اسم ملف عنصر التحكم ويجب انشاء وسيلة index وطبعا اذا لم نحدد مستوي ستحدد تلقائيا public وعند تشغيل النظام سيعمل بنجاح وهذا يعني ان كائن المسار الذي سبق وقمنا بانشاءه يعمل بكفاءة وقام بتحميل عنصر التحكم الصحيح وتنفيذ ما بداخله ، لنقوم بانشاء عنصر تحكم اخر ليتوافق مثلا مع طلب مثل links/view ، سنقوم بانشاء ملف باسم links.php داخل مجلد controllers
وقم باضافة الكود الاتي اليه
كود PHP:
<?php 
Class Controller_Links Extends Controller_Base {
        function 
index() {
                echo 
'Hello , This Is The index of Links ';
        }
        function 
view() {
                echo 
'Hi , This Is The Links View ';
        }
}
?>
ولنفترض ان المجلد الرئيسي للنظام اسمه MVC اكتب الرابط بالشكل الاتي
http://localhost/MVC/index.php?route=links/view
سيعرض لك الجملة Hi, This Is The Links View
بانشاء عنصر تحكم جديد واى وسائل بداخله نكون انشئنا صفحة جديدة كاملة فى نظامنا ولا نحتاج الى include لاى ملف عام فى البداية ، الان جزء عناصر التحكم يعمل بسلام ننتقل الان لجزء العرض View

@@ نهاية الجزء الرابع @@
------------------------------
يتبع ...






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 04:50 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#6  

@@ الجزء الخامس- نظام العرض @@
------------------------------------------

مثل نظام النموذج هناك العديد من الطرق المختلفة لانشاء نظام العرض ، يمكننا استخدام كائن المسار ليقوم بتحميل ملف باسم يبدا مثلا ب 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
سنكتب به السطر التالى
كود PHP:
Deny from ALL 
واحفظه باسم .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=$[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

-------------------------------

وفى النهاية فإن اصبت فمن الله عز وجل و إن أخطات فمن نفسي ومن الشيطان

اخوكم محمد ،،

لا يتبع ...






الملفات المرفقة
نوع الملف: zip Swalif_MVC.zip‏ (4.8 كيلوبايت, 32914 مشاهدة)
__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 04:52 AM
الرد مع إقتباس
عضو سوبر نشيط
تاريخ الإنضمام: Apr 2004-
#7  

بعد قرائة أول جزء فقط أحب أسجل حضوري وأقولك بشموهندس كبييييير بجد

فعلاً الله أكبر عليك وبارك الله فيك وزادك من علمه


لا تنسى "وما أتيته عن علم, ولكن الله يرزق من يشاء"






__________________
حازم خالد
اناشيد مسلم تيوب
المدونة
السيرة الذاتية
hazem.khaled (at) gmail.com
www.تيوب.com
mezoo is offline   قديم 24-08-2007, 06:12 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#8  

جزاك الله كل خير يا مستر حازم منور الموضوع والله

ومستني تعقيبك ونقدك واى اضافات من حضرتك بعد ما تقراه كله






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 06:27 AM
الرد مع إقتباس
عضو نشيط جدا
تاريخ الإنضمام: May 2007-
#9  

حبيبي هاوي كع اني ما فهمت الكثير وما القصد من وراء نظام MVC الا انني فهمت الاكواد وآلية عملها .

مشكور والى الامام .






__________________
EbNCaNa اخوكم ابن قانا

[درس] قائمة بريدية بأسهل الطرق بواسطة PHP

[توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟
EbNCaNa is offline   قديم 24-08-2007, 12:31 PM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#10  

-> EbNCaNa

ارجع للجزء الاول " نقطة اساس النظام "

واذا كنت تعاملت مع اى فريم وورك وقرات المانول بتاعه هتجد ان اساس ونواة اطار العمل هو ال MVC

مشكور

اخوك محمد ،،






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 06:36 PM
الرد مع إقتباس
عضو فعال
تاريخ الإنضمام: Aug 2005-
#11  

بسم الله ما شاء الله عليك بجد
الموضوع قيم جدا جدا
و لو تسمح لي ممكن انقله للموقع الخاص بي مع حفظ حقوقك ككاتب للموضوع ؟

و جزاك الله كل خير

أحمد أبو النصر






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر is offline   قديم 24-08-2007, 06:55 PM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#12  

إقتباس:
بسم الله ما شاء الله عليك بجد
الموضوع قيم جدا جدا
و لو تسمح لي ممكن انقله للموقع الخاص بي مع حفظ حقوقك ككاتب للموضوع ؟

و جزاك الله كل خير

أحمد أبو النصر
جزاك الله كل خير يا اخ احمد

و يشرفني طبعا نقله لموقعك ولا يهم حقوقي لكن المهم ذكر المصدر ( سوالف )


محمد ،،






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 24-08-2007, 07:12 PM
الرد مع إقتباس
Banned
تاريخ الإنضمام: Sep 2006-
#13  

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

بارك الله فيك استاذ محمد فعلا ووفيت بهديتك وارجو ان تفيد بها ايضا فى مجتمع مطورى الويب العربى وجزاك الله خير على الشرح الرائع واتمنى لك المزيد من العلم والتقدم بأذن الله وانا كمان
تحياتى لك : اخوك عمرو






Any-Services is offline   قديم 25-08-2007, 02:17 AM
الرد مع إقتباس
عضو فعال
تاريخ الإنضمام: Jun 2002-
#14  

بسم الله الرحمن الحيم
وعليكم السلام ورحمة الله وبركاته
..
...
درس رائع فعلاً... وإضافة جديدة إلى ما أعرفه عن PHP
جزاك الله خيرا
.
.
بالتوفيق ..






PHP-Master02 is offline   قديم 25-08-2007, 08:29 PM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#15  

إقتباس:
المشاركة الأصلية بواسطة vB Master
السلام عليكم ورحمة الله وبركاتة

بارك الله فيك استاذ محمد فعلا ووفيت بهديتك وارجو ان تفيد بها ايضا فى مجتمع مطورى الويب العربى وجزاك الله خير على الشرح الرائع واتمنى لك المزيد من العلم والتقدم بأذن الله وانا كمان
تحياتى لك : اخوك عمرو
يارب تكون استفدت من الدرس ان شاء الله






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 25-08-2007, 10:46 PM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#16  

إقتباس:
المشاركة الأصلية بواسطة PHP-Master02
بسم الله الرحمن الحيم
وعليكم السلام ورحمة الله وبركاته
..
...
درس رائع فعلاً... وإضافة جديدة إلى ما أعرفه عن PHP
جزاك الله خيرا
.
.
بالتوفيق ..
جزانا واياكم ، الحمد لله انك استفدت من الدرس والمزيد ياتي قريبا باذن الله






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 25-08-2007, 10:47 PM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#17  

وشكرا جزيلا لتثبيت الموضوع ، جزاكم الله كل خير

محمد ،،






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 25-08-2007, 10:49 PM
الرد مع إقتباس
عضو فعال
تاريخ الإنضمام: Nov 2005-
#18  

جزاك الله خيراً يا محمد على الشرح الجميل ده وبإذن الله اذا فيه فرصة ارد رد تانى فى الموضوع بعد اما اقرا الرح بإستفاضة اكبر ..






__________________
سبحان الله وبحمده ... سبحان الله العظيم.
إقرأ .. لتتعلم
[AJAX] سكربت إتصل بنا (ديف كونتاكت) النسخة 2.3.2
للتواصل ..
Developer. is offline   قديم 28-08-2007, 01:55 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#19  

جزانا واياكم يا احمد ربنا يكرمك ،

عارف ان وقتك ضيق بسبب الدراسة ، ربنا يعينك على الــ[ض]ــروس الخصوصية

ومستنيك تنور الموضوع بتعقيبك على الشرح ان شاء الله وباذن الله يعجبك

دمحـمـ
<====






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 28-08-2007, 02:36 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: May 2007-
#20  

درس جميل اخي هاوي اول مرة اشوف درس عربي يتحدث عنها

سلامات






__________________
Bruce - مدونة شديدة التخصص في PHP وتطبيقات الويب
Bruce is offline   قديم 31-08-2007, 01:16 PM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#21  

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

سلامات
الحمد لله ان الدرس نال اعجابك

وهو منقدرش نقول عليه درس عربي لان اساس الدرس كله درس انجليزي ارفقت رابطه فى نهاية الجزء الخامس

يعني كل الى عملته انى ترجمته فقط مع بعض التعديلات الطفيفة ،

محمد ،،






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 31-08-2007, 09:31 PM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: May 2006-
#22  

بصراحه درس أكثر من رائع ولو اني حزين لاني رديت متاخر بسبب عدم دخولي الكثير في الفتره الحالية بسبب الانشغال






__________________
أحمد فوزي
مبرمج PHP
مدونتي الشخصية
العربي لخدمات المواقع
TheArabi is offline   قديم 06-09-2007, 02:41 PM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#23  

إقتباس:
بصراحه درس أكثر من رائع ولو اني حزين لاني رديت متاخر بسبب عدم دخولي الكثير في الفتره الحالية بسبب الانشغال
جزاك الله كل خير اخي ولا يهم متاخر ولا فى وقته المهم ان الدرس يكون عجبك

اخوك محمد ،،






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 07-09-2007, 02:05 AM
الرد مع إقتباس
عضو نشيط
تاريخ الإنضمام: Sep 2006-
#24  

للمزيد عن مفهوم ال MVC وجدت تدوينة للاستاذ عبدالله المهيري - سردال

تتحدث عن مفهوم ال MVC و مثال له فى ال PHP و اخر فى ال Ruby

تفضلوا >> نظرة على أطر العمل MVC

اخوكم محمد ،،






__________________


Mohamed Mahmoud

Mobile : +20103452846

Blog : Hawy PHP

Mail : Hawy [.] PHP [@] Gmail.com

حسبي الله ونعم الوكيل

Hawy PHP is offline   قديم 08-09-2007, 08:23 PM
الرد مع إقتباس
عضو فعال
تاريخ الإنضمام: Apr 2004-
#25  

تسلم ايدك يا استاذ محمد

انا طبعا شوفت الموضوع من اول يوم لكن حبيت اقرأه كله قبل ما ارد عليك عشان اقولك انك اخترت الموضوع الصح في التوقيت الصح حيث ان كل اللي كان ناسي بيعمل ابجريد ل PHP5 اليومين دول وغير كده التركيز الفتره اللي جايه علي الشغل في فرق عمل زي ما Silkroad عملت لو فكرت تطلع تريد من غير Party مش هتعرف توصل دلوقت لو فكرت تنجح برنامج من غير Party هتنجح لو كنت مجتهد خرجنا عن الموضوع

علي فكره انا ما كنتش ركزت في الموضوع ده نهائي قبل ما انت تكتب موضوعك حيث ان ال Ruby لما فكرت اتعلمها مشيت فيها شويه وبعدها ما كانش فيه وقت اكمل لكن انت سخنتني بعد ما قولتلي علي ال code igniter لكن صراحه حتي الان لم انوي التعامل بالFrame Works استعمل حتي الان فقط Class System من برمجتي لاني مقتنع حتي الان ان ال Frame Works او ال Template Engines مكانها هو فرق العمل لتحديد Standard Code Syntax يمشي عليه الفريق كله في كتابة الكود وملفات العرض وصراحة الMVC احسن طريق لكده لكن درسك ده ممكن يدي للواحد الافكار اللي ممكن يكون محتاجها لو انه هيكتب كود خاص بيه ممكن تكون دي البدايه






Ahmed Tohamy is offline   قديم 17-09-2007, 04:48 AM
الرد مع إقتباس
الرد على الموضوع


 

أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
[درس] نظام تصويت بسيط :) المحارب PHP 9 09-01-2005 03:23 PM
درس كيفية عمل تذهيب ثلاثي الأبعاد بسيط بالفوتوشوب -1- b happy التصميم والرسومات والمونتاج 18 29-11-2004 12:06 PM
خطوة اولى في بناء نظام ارسال sms من موقعك wisam74us الويب والويب 2.0 والتجارة الالكترونية 18 04-04-2004 04:33 PM
نظام قوالب template بسيط illogicalX PHP 25 30-05-2003 06:02 AM
ما هو نظام تشغيل اللينكس؟ screen الأخبار المتعلقة بالإنترنت والتقنية 0 08-06-2002 02:24 PM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 10:51 AM.