آموزش Codeigniter - جلسه چهارم: ایجاد صفحات ایستا
در سه جلسهی قبلی سری آموزشی فریمورک Codeigniter هدف ما این بود تا با ساختار کلی و اصول کاری آن تا حد قابل قبولی آشنا شوید. اما از این جلسه رفته رفته با تکتک قابلیتها و اجزای این فریمورک آشنا شده و نهایتا با یک پروژهی کاربردی و عملی تمام موارد آموزش داده شده را بهکار خواهیم گرفت.
بسیاری از مواقع پیش میآید که در پروژهی خود نیاز به ایجاد صفحات ثابت خواهید داشت. پس با زومیت همراه باشید، در این جلسه قصد داریم تا روش ایجاد صفحات استاتیک (ایستا) را با فریمورک Codeigniter به شما آموزش دهیم.
ایجاد صفحات استاتیک
بدون توضیح اضافه به سراغ اصل آموزش میرویم. ابتدا نرمافزار زمپ را روی رایانهی خود اجرا کرده و سرور آپاچی و Mysql را در حال فعال قرار دهید.
در پوشهی htdocs محل نصب نرمافزار زمپ، یک پوشهی جدید به نام ci-static ایجاد کرده و سپس فایلهای اصلی فریمورک Codeigniter را که در جلسات قبل دانلود کرده بودید در این پوشه کپی کنید.
همانند روشی که در جلسات قبل توضیح دادیم نصب فریمورک را انجام دهید تا پس از اجرای آدرس http://127.0.0.1/ci-static صفحهی خوشآمدگویی Codeigniter به شما نمایش داده شود.
اولین موردی که باید برای ایجاد یک صفحهی ثابت ایجاد کنید، کنترلری است که از طریق آن صفحات استاتیک را مدیریت کنیم. در جلسهی قبلی کمی در مورد ساختار URL فریمورک مورد بحث صحبت کردیم. اما به آدرس َURL زیر دقت کنید:
http://example.com/news/latest/10
اگر چنین وبسایتی با Codeigniter ایجاد شده باشد، مطمئنا کنترلری به نام news در آن ایجاد شده که این کنترلر دارای متدی به نام lastest است. شمارهی ۱۰ در پایان آدرس نیز اشاره به آیدی یکتای خبر، دارد و از این طریق خبر خاصی به کاربر نمایش داده شده است. در واقع این عدد آرگومان متد یاد شده خواهد بود. در روش MVC نیز شرایط به همین صورت است. آدرس زیر را در نظر بگیرید:
http://example.com/[controller-class]/[controller-method]/[arguments]
شرایط آدرس بالا نیز همانند مثال قبل است. اما همچنان که شمای URL پیچیدهتر شود، امکان دارد وضعیت کمی تغییر کند. اما فعلا تمام چیزی که نیاز دارید بدانید همان است که توضیح دادیم.
اما به سراغ ادامهی کار میرویم. در مسیر application/controllers فایلی به نام Page.php ساخته و کد زیر را در آن قرار دهید.
phpclass Pages extends CI_Controller { public function view($page = 'home') { }}
با استفاده از کد بالا شما یک کلاس کنترلر ایجاد کردهاید که نام آن Pages است. این کلاس از کلاس اصلی کنترلر یعنی CI_Controller ارثبری میکند و دارای یک متد به نام view است. این متد یک آرگومان ورودی دریافت میکند که البته مقدار پیشفرض این آرگومان نیز home تعیین شده است. با این روش، کلاس ایجاد شده در بالا میتواند از تمامی متدها و متغیرهای تعریف شده در کلاس اصلی CI_Controller در آدرس system/core/Controller.php استفاده کند.
کنترلر در واقع مرکزی است که هر درخواستی به آن ارسال میشود. همانند کلاسهای پیاچدی به منظور اشاره به خود کلاس از this$ استفاده میکنیم. با اشاره به this$، نماها، و دستورهای اصلی فریمورک اجرا خواهند شد.
حال که اولین متد خود را ایجاد کردیم، وقت آن رسیده تا چند صفحهی اچتیامال ساده را نیز ایجاد کنیم. در اینجا قصد داریم تا دو صفحه ایجاد کنید که یکی به عنوان header و دیگری به عنوان footer در نظر گرفته خواهند شد.
در مسیر application/views/templates فایلی به نام header.php ایجاد کرده و کد زیر را در آن قرار دهید.
<html> <head> <title>CodeIgniter Tutorialtitle> head> <body> <h1>php echo $title; ?>
The header contains the basic HTML code that you’ll want to display before loading the main view, together with a heading. It will also output the $title variable, which we’ll define later in the controller. Now, create a footer atapplication/views/templates/footer.php that includes the following code:
<em>© 2016 - zoomitem> body>html>
افزودن منطق به کنترلر
تا اینجای کار شما یک کنترلر و یک متد به نام view ایجاد کردهاید. این متد یک پارامتر ورودی دریافت میکند که این ورودی در واقع نام صفحهای است که قصد نمایش آن را به کاربر داریم. صفحات استاتیک یا همان قالب صفحات در پوشهی application/views/pages قرار میگیرند.
در پوشهی یاد شده، دو فایل به نامهای home.php و about.php ایجاد کنید. در داخل این فایلها هر متنی که دوست دارید را قرار داده و سپس آنها را ذخیره کنید. در سادهترین حالت ممکن میتوانید از عبارت Hello World استفاده کنید.
به منظور بارگذاری و اجرای این صفحات، باید بررسی کنیم که چنین صفحاتی وجود دارند. به کد زیر توجه کنید. در اینجا ما متد view کنترلری که در مرحلهی اول ایجاد کردیم را تغییر میدهیم.
public function view($page = 'home'){ if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php')) { // Whoops, we don't have a page for that! show_404(); } $data['title'] = ucfirst($page); // Capitalize the first letter $this->load->view('templates/header', $data); $this->load->view('pages/'.$page, $data); $this->load->view('templates/footer', $data);}
حال اگر صفحهای که فراخوانی میشود وجود داشته باشد، بخش هدر و فوتر و خود صفحه به کاربر نمایش داده خواهند شد. اگر صفحهی فراخوانی شده وجود نداشته باشد نیز یک خطای ۴۰۴ به کاربر نمایش مییابد. این مورد با شرطی که در متد یاد شده ایجاد کردهایم انجام میشود.
در اولین خط این متط بررسی کردهایم که آیا صفحهی درخواست شده وجود دارد یا خیر. در این بخش از تابع داخلی پیاچدی به نام file_exists استفاده کردهایم. تابع show_404 نیز از جمله توابع داخلی فریمورک Codeigniter است و کار آن نمایش و رندر یک صفحهی خطای ۴۰۴ است.
در قالب هدر، متغیری به نام title$ مورد استفاده قرار گرفت تا از این طریق بتوانیم عنوان هر صفحه را جداگانه تعریف کنیم. مقدار این متغیر در همین متد (متد view) تعیین شده اما این بار به جای اختصاص دادن مقدار به متغیر، مقدار مورد نظر را به یکی از المانهای آرایهی data$ نسبت دادهایم.
آخرین مرحله بارگذاری صفحهای است که قصد داریم آن را اجرا کنیم. دومین پارامتر در متد ()view به منظور ارسال متغیر به فایل ویوو مورد استفاده قرار میگیرد. هر مقدار را باید در یکی از اعضای آرایهی data$ قرار دهیم. بدین منظور باید نام متغیرهایی که در فایلهای نما یا ویوو ایجاد کردهایم را به عنوان کلید آرایه در نظر بگیریم. بنابراین از آنجا که در فایل نمای ما برای تعیین عنوان متغیری به نام title$ را بکار گرفته بودیم، پس برای اختصاص دادن این مقدار به آرایهی data$ باید از :
$data['title']
استفاده کنیم.
مسیریابی
حال کنترلر ما برنامهنویسی شده و با استفاده از آدرس دهی به مرورگر میتوانیم صفحهی ایجاد شده خود را مشاهده کنیم. اگر در این مرحله به مسیر http://120.0.0.1/ci-static/index.php/pages/view/about مراجعه کنید، صفحهی دربارهی ما را که در مراحل بالا ایجاد کرده بودید، مشاهده خواهید کرد. همچنین دو بخش هدر و فوتر به ترتیب به بالا و پایین صفحهی درباره ما (about) اضافه خواهند شد.
استفاده از قوانین مسیریابی سفارشی باعث میشود تا بتوان هر کنترلر و متدی را اجرا کرد و قوانین پیشفرض موجود را به دلخواه تغییر دهیم. حالت پیشفرض از ساختار کلی زیر بهره میبرد.
http://example.com/[controller-class]/[controller-method]/[arguments]
حال میخواهیم آدرسدهی خود را برای فریمورک تعیین کنیم. فایل مسیریابی که در application/config/routes.php قرار گرفته را باز کرده و دو خط زیر را به آن اضافه کنید. تمام خطوطی که مقادیری را در آرایهی route$ تنظیم میکنند از این فایل پاک کنید.
$route['default_controller'] = 'pages/view';$route['(:any)'] = 'pages/view/$1';
فریمورک CodeIgniter قوانین مسیریابی خود را از بالا به پایین میخواند و در انجام این کار به اولین قانون موجود درخواست ارسال میکند. هر قانون در واقع یک عبارت منظم (regular expression) است که در سمت چپ قرار گرفته و نقشهی مدنظر توسعه دهنده را برای هر یک از متدهای کنترلرها تعیین میکند. نام کنترلر، نام متد داخلی و آرگومان ورودی، توسط اسلشها از یکدیگر جدا میشوند. هنگامی که یک درخواست دریافت شود، فریمورک CodeIgniter به دنبال اولین مسیریابی موجود در این بخش که با آن درخواست مچ باشد میشود و سپس کنترلر و متد مورد نظر توسعهدهنده را اجرا خواهد کرد و در صورت نیاز آرگومانی را به متد یاد شده ارسال خواهد کرد.
در مورد قوانین مسیریابی در CodeIgniter در جلسات آینده بیشتر صحبت میکنیم.
نکته مهمی که باید بدانید این است که اگر فکر میکنید این مباحث کمی گنگ است اصلا جای نگرانی وجود ندارد. این مباحث اولیه همانند قطعات یک پازل به ذهن شما ارسال شدهاند تا رفته رفته با داشتن قطعات بیشتر پازل اصلی که در اینجا فهم کامل فریمورک CodeIgniter و روش کار با آن است، برای شما میسر شود.
در خط دوم کد بالا به دلیل استفاده از ولدکارت (any:)، این بخش با تمامی درخواستها هماهنگ و مچ بوده و پارامترها را به متد ()view در کلاس Pages ارسال میکند.
حال اگر آدرس http://127.0.0.1/ci-static/index.php/about را اجرا کنید، همان صفحهی دربارهی ما بارگذاری خواهد شد. این کار نتیجهی تغییرات و سفارشیسازی مسیریابی در فریمورک CodeIgniter است. این فریمورک در عین سبک بودن انعطاف بسیار بالایی دارد و به عقیدهی ما میتوان برای بسیاری از پروژههای سنگین نیز از آن بهره گرفت.
نظر شما در این مورد چیست؟ اگر سوال یا مشکلی با مباحث مطرح شده در این جلسه دارید آن را از طریق بخش دیدگاهها با ما در میان بگذارید.
نظرات