حسناً
بعد ان أخذنا نظرة عامة على طريقة العامل مع CI .. ما رأيكم في ان نصنع اول تجربة لنا ؟
اولاً دعوني أوضح طريقة التعامل مع المجلدات بداخل مجلد System ..
كل ما بداخل مجلد System يعتبر مجلدات تخص الـ Core الخاص بـ CI ... بإستثناء مجلد application
مجلد application هو مساحة العمل الخاصة بالموقع نفسه ( وليس CI ) ..
بمعنى .. اذا قمت مثلاً بعملية Core Extending فإنك ستضع ملف الـ Library الخاصة بك في مجلد System/libraries ...
ولكن اذا كنت تمتلك Library وظيفتها التعامل مع نقطة معينة في الموقع .. فإنك ستضيعها في مجلد application/libraries ...
كذلك نفس الموضوع بالنسبة للـ Plugins والـ Helpers
حسناً الآن نحن بداخل مجلد Application ..
لدينا هذه المجلدات .. سأشرحها سريعاً :
- config يحتوي على إعدادات الموقع . ويمكنك وضع إعداداتك الخاصة في ملف منفصل بالداخل لتستخدمها وقتما تشاء مع Library مثلاً او Plugin
أهم 4 ملفات سنتعامل معهم طوال الوقت هم :
- config.php يحتوي على إعدادات عامة
- database.php يحتوي على الإعدادات الخاصة بالتعامل مع قواعد البيانات
- routes.php يحتوي على الخصائص الخاصة بك للتحويل بين الروابط , مثال :
كود PHP:
// index.php/welcome -> index.php/home
$route['welcome'] = "home";
- autoload.php ملف تقوم فيه بتحديد الإضافات التي تريد ان يتم تحميلها تلقائياً بدون ان تكتب أمر التحميل :
كود PHP:
$this->load->library('library_name');
- controllers يحتوي على صفحات الموقع بإختصار
- errors يحتوي على صفحات الأخطاء ( Templates ) يمكنك التعديل عليها بطريقتك الخاصة مثلاً
- helpers يحتوي على جميع الـ Helpers
- hooks يحتوي على جميع الـ Hooks
- language يحتوي على جميع ملفات اللغة
- libraries يحتوي على جميع الـ Libraries
- models يحتوي على جميع الـ Models
- views يحتوي على جميع ملفات الـ View أي الـ ( Templates )
كل ملف جديد في مجلد controllers يساوي صفحة جديدة .... مثال :
test.php يساوي http://www.example.com/index.php/test
روابط CI تعمل بهذه الطريقة :
كود PHP:
http://www.example.com/index.php/class/function/variable
سأوضح هذه النقطة اكثر بعد قليل ان شاء الله ..
إذا دخلت إلى http://www.example.com/index.php ستجد ان هناك صفحة ترحيب أولية ... ولكن اذا دخلت إلى مجلد controllers ستجد ان اسم الصفحة الترحيبية هو welcome.php .. كيف اذاً اصبحت الصفحة تظهر عند الدخول إلى index.php فقط وليس index.php/welcome ( بالرغم من انك اذا ذهبت ايضاً إلى index.php/welcome ستظهر نفس الصفحة بالتأكيد )
حسناً .. هناك إختيار في ملف config/routes.php يحدد لك الـ Controller الإفتراضي الذي تريده ان يظهر عند الدخول إلى index.php فقط :
كود PHP:
$route['default_controller'] = "welcome";
لا تحتاج إلى إضافة تنسيق الملف .. فقط ضع اسم الـ Controller ..
حسناً اعتقد بأننا جاهزون ان شاء الله لإنشاء أول ملف تجربة لنا ... بسم الله :
نذهب إلى مجلد application/controller ونحذف اولاً ملف welcome.php .. ثم نصنع ملف جديد خاص بنا اسمه مثلاً home.php ...
افتح الملف وضع بداخله الآتي
كود PHP:
<?php
class Home extends Controller {
function index()
{
}
}
?>
لاحظ هذه النقاط المهمة :
يجب ان يكون اسم الكلاس بالضبط نفس اسم ملف ( بدون التنسيق طبعاً )
يجب ان يكون مورث من الكلاس Controller ليعمل حسب نظام CI ( مزيد حول فائدة Extends )
يجب ان يحتوي على function بأسم index .. مما يعني ان محتوى هذا function سيظهر بمجرد الدخول إلى index.php/home وكذلك بالتأكيد index.php/home/index
حسناً .. اذا دخلنا إلى index.php/home بالطبع لن يظهر اي شيء امامك .. لأن الصفحة فارغة ..
سوف نضع عبارة أولية للتجربة :
كود PHP:
<?php
class Home extends Controller {
function index()
{
echo 'Hello World!';
}
}
?>
ادخل مرة اخرى إلى index.php/home وسوف تجد عبارة " Hello World! " مطبوعة 
الآن اعتقد بأن الأمر واضح .. الـ function بأسم index .. يساوي صفحة الـ index لقسم Home
دعوني اوضح الفكرة أكثر .. اذا قمنا بعمل function جديد مثلاً بأسم Test داخل كلاس Home .. :
كود PHP:
<?php
class Home extends Controller {
function index()
{
echo 'Hello World!';
}
function test()
{
echo 'Page Test.. :)';
}
}
?>
الآن ادخل إلى index.php/home/test سوف ترى ما أعنيه ..
وهو كما ذكرت في السابق :
كود PHP:
http://www.example.com/index.php/class/function/variable
اسم الـ Class يأتي اولاً .. ثم الـ Function ثم الـ Variables بعدها بأي كمية كانت .. لا يوجد عدد محدود وسوف اتطرق للـ Variables بعد قليل إن شاء الله
الآن طبعاً من الخطأ تماماً ان نطبع الكلام عن طريق echo وإلا .. فقد عادت ريما لعادتها القديمة...
كما تعلمنا سابقاً .. فإن لكل Controller ملف View أي ( Template ) ... دعونا ننشئ ملف View بداخل مجلد views ونسميه كذلك home.php
هذا الملف الآن يتعامل كلياً بأكواد HTML .. لذلك ضع ما تريد .. ولكني افضل :
كود HTML:
<h1>Hello World!</h1>
الآن إذا ذهبت إلى صفحة index.php/home بالتأكيد سوف تجد الصفحة كما هي في البداية .. لاننا مازلنا نقوم بطباعة الكلمة عن طريق echo .. حسناً دعونا الآن نرى كيف نحضر ملف view إلى الـ Controller ..
كود PHP:
<?php
class Home extends Controller {
function index()
{
$this->load->view('home');
}
function test()
{
echo 'Page Test.. :)';
}
}
?>
لنذهب مرة اخرى إلى index.php/home .. نعم لقد تم إدراج ملف الـ view بنجاح 
مزيد للمعلومات حول View من دليل الاستخدام ( بالإنجليزية )
حسناً بالتأكيد انكم لاحظتم ان طريقة كتابة امر الإدراج متشابهة في أغلب الأحوال . مثال :
كود PHP:
$this->load->view('');
$this->load->library('');
$this->load->helper('');
$this->load->plugin('');
فقط لأنك من الطبيعي لاحقاً سوف تخمن ان الجزء المطلوب تغييره هو الجزء الاخير فقط .. 
وهذا من اكبر الاسباب التي تعجبني في CI .. يعطيك بالضبط ما تفكر به ..
حسناً .. نمتلك الآن ملف الـ View ويعمل بنجاح ..
ماذا إذا اردنا إدخال متغير من الـ Controller إلى ملف الـ View ؟
بسيطة ...
كود PHP:
<?php
class Home extends Controller {
function index()
{
$data['text'] = 'Hello World!';
$this->load->view('home',$data);
}
function test()
{
echo 'Page Test.. :)';
}
}
?>
داخل ملف الـ View
كود HTML:
<h1><?=$text?></h1>
اذا الأمر واضح الآن .. الـ Key في المصفوفة بداخل الـ Controller يصبح متغير داخل الـ View .. مثال آخر
الـ Controller :
كود PHP:
<?php
class Home extends Controller {
function index()
{
$data['text'] = 'Hello World!';
$data['how'] = 'How are you ?';
$data['thanks'] = 'Thanks :)';
$this->load->view('home', $data);
}
}
?>
بداخل ملف الـ View :
كود HTML:
<h1><?=$text?></h1>
<h2><?=$how?></h2>
<h3><?=$thanks?></h3>
حسناً دعونا نتعمق اكثر ... ماذا إذا اردت ان اربط متغير بملف view ؟ مثلاً ..
لدي ملف View بأسم Header .. اريد ان ادرجه بداخل الـ View الرئيسي ...
سهلة 
قم بعمل ملف جديد في مجلد application/views بأسم header.php .. مثلاً سنضع داخله :
كود HTML:
<h1>Header here</h1>
اذهب إلى الـ Controller مرة اخرى .. الآن سنعرف متغير بداخل المصفوفة data .. ليحتوي على ملف الـ view الخاص بالـ Header ... ولكن سيكون الوضع مختلف قليلاً ...
كود PHP:
<?php
class Home extends Controller {
function index()
{
$data['header'] = $this->load->view('header', '', TRUE);
$data['how'] = 'How are you ?';
$data['thanks'] = 'Thanks :)';
$this->load->view('home', $data);
}
}
?>
ملف الـ View :
كود HTML:
<?=$header?>
<h2><?=$how?></h2>
<h3><?=$thanks?></h3>
الآن الـ function بأسم view يأخذ 3 مدخلات .. وهم :
1- اسم ملف الـ view وهو header في هذه الحالة
2- تمرير بعض المتغيرات إلى ملف الـ view ( كما شاهدنا في السابق ). وفي هذه الحالة نحن لا نريد ان نضع اي شيء فيه لذلك سنجعله فارغ
3- يقبل فقط TRUE او FALSE .. ووظيفتة هذا المدخل او ان يجعل معلومات ملف الـ View هذا قابلة لأن تكون بداخل متغير لإستخدامها في اي مكان آخر ... إذا قمت بجعله FALSE .. ستجد ان الـ View يتم طباعته تلقائياً بدون حتى وجود المتغير $header في ملف الـ view الرئيسي ...
* تنبيه.. طبعا اذا كنت تريد طباعة ملف view بدون تمرير متغيرات او جعله قابل ليكون بداخل متغير .. ستستخدم مدخل واحد فقط وهو لأسم ملف الـ view كما كتبناه في الأعلى ..
حسناً .. مازال هناك بعض النقاط الاخرى ... شاهد المثال :
الـ Controller :
كود PHP:
<?php
class Home extends Controller {
function index()
{
$data['how'] = 'How are you ?';
$data['items'] = array (
'item1' => 'This is item 1',
'item2' => 'This is item 2'
);
$this->load->view('home', $data);
}
}
?>
ملف الـ View :
كود HTML:
<h1><?=$how?></h1>
<ul>
<li><?=$items['item1']?></li>
<li><?=$items['item2']?></li>
</ul>
نستنتج من هذا انه يمكننا ايضاً تمرير مصفوفة إلى ملف الـ view
بل يمكنك حتى استخدام foreach لإستخراج محتوى المصفوفة
ملف الـ View :
كود PHP:
<h1><?=$how?></h1>
<ul>
<?php foreach ($items as $item) { ?>
<li><?=$item?></li>
<?php } ?>
</ul>
حسناً هذه كانت فقط البداية للتعريف بجزء بسيط من اسلوب عمل CI ...
اتمنى ان تكون الفكرة وصلتكم وسوف انتظر منكم ان تخبروني هل نجحت التجارب معكم ام لا .. اتمنى ان قد وفقت في الشرح ..
ودائماً انصح بالرجوع إلى دليل الإستخدام لإحتوائه على جميع التفاصيل التي قد تتسائل عنها
ومازلت عند وعدي إن شاء الله سوف اقوم بتعريب دليل الإستخدام ولكن في وقت فراغي بإذن الله .. واتمنى اذا كان هناك احد يريد مساعدتي في ذلك سوف أسعد جدا جدا ...
هذا الشرح هو كاملاً ( والكمال لله وحده ) من جهدي الشخصي .. كل ما ارجوه منكم اخوتي هو الدعاء لي ولوالدي وللمسلمين ...
كما اذكر مرة اخرى .. ارجوا ان نبقى النقاش فقط فيما يتمحور حول CI والتعامل معه ...
سبحانك اللهم وبحمدك .. اشهد ان لا إله إلا انت .. استغفرك وأتوب إليك ...
اخوكم في الله ..
مصعب الزيني