آموزش کامل برنامه نویسی یک وبلاگ با php به صورت شی گرا(OOP)

45 دیدگاه

سلام

اگر از علاقه مندان برنامه نویسی وب علی الخصوص php و کلا دنیای طراحی وب باشید و از طرفی تازه وارد این دنیای زیبا شده باشید ، احتمالا در شروع کار و نحوه ادامه آن تا رسیدن به هدف مورد نظر مشکل دارید.به عبارت خودمانی تر معمولا بعد از اینکه نکات اولیه و تئوری نحو و ساختار و دستورات زبان php را فرا بگیرید ، ممکن است این سوال برایتان پیش آید که حالا اگر بخواهم یک سایت را طراحی کنم ، از کجا شروع کنم ؟

این سوال شاید خیلی ساده به نظر برسد ولی ندانستن جواب آن می تواند کلید شکست هایی در آینده باشد.شبیه دویدن در شب هنگام که هیچ روشنایی وجود ندارد و هدفی هم نمایان نیست و هر لحظه احتمال نا امیدی وجود دارد.

برای جواب به این سوال و جلوگیری از عواقب بعدی پیشنهاد می کنم در این مطلب با ما باشید چون می خواهیم نحوه برنامه نویسی یک وبلاگ به زبان برنامه نویسی php را به صورت کامل و گام به گام بیان کنیم.سبک برنامه نویسی نیز OOP یا شی گرا(Object Oriented Programming) خواهد بود.

مباحث نیز به صورت کوتاه و مختصر بیان شده اند و از اضافه گویی پرهیز شده است.اگر در هر بخش سوالی برایتان پیش آمد،لطفا در قسمت نظرات مطرح نمایید ، در صورت امکان پاسخ خواهیم داد .

سرفصل های کلی :

  •  مراحل ساده انجام يک پروژه تحت وب
  • برنامه نویسی شی گرا چیست ؟
    • کلاس ; الگويي براي ايجاد اشيا
    • ایجاد اولین شی
    • متد سازنده کلاس
  • پایگاه داده
    • افزونگی داده
    • جداول مورد نیاز وبلاگ
  • ساختار فایل های وبلاگ
    • فایل includes.php و بررسی آن
    • فایل index.php وبلاگ
    • فایل blogpost.php ،حاوی کلاس اصلی
    • فایل template-engine.php – فایل حاوی کلاس موتور
    • فایل template-blogindex.tpl – فایل قالب وبلاگ
    • شیوه نامه و عکس های مربوط به وبلاگ
  • آخرین قسمت سریال وبلاگ – محدود کردن دسترسی به فایل tpl

 

مراحل ساده انجام يک پروژه تحت وب

قبل از اينکه سراغ شي گرايي در php برويم ، بهتر است در مورد شروع کار يک پروژه کمي توضيح دهم.فرض کنيد يک پروژه به ما سفارش داده شده است تا انجام دهيم.اول سعي مي کنيم طراحي قالب کار را تمام کنيم تا آماده پياده کردن روي برنامه باشد.بعد ساختار پايگاه داده و جداول را روي کاغذ مي آوريم و با کمي داده آزمايشي آنها را ايجاد مي کنيم.حالا در شروع برنامه نويسي ، در اکثر کارها دو بخش داريم

1.بخش عمومي

2.بخش مديريت سايت

.اول مي رويم سراغ بخش عمومي و بعد از تست آن با داده هاي آزمايشي پايگاه داده ، نوشتن بخش مديريت را شروع مي کنيم.هدف از بخش مديريت این است که بتوانيم داده ها را تغيير دهيم و اين همان مزيت وبسايت هاي پويا نسبت به ايستاست.حالا که مطمئن شديم کارکرد سيستم درست است ، مي توانيم قالب را که در بخش اول طراحي کرده ايم ،روي سيستم پياده کنيم و بدين ترتيب کار پروژه تمام است و موقع حساب و کتاب رسيده است.

 

برنامه نویسی شی گرا

کلاس ; الگويي براي ايجاد اشيا

کلاس در oop به عنوان الگويي براي ايجاد شي استفاده مي شود.يادتان باشد قبلا مثالي آورديم و اشيا داخل کيس را با اشيا در برنامه مقايسه کرديم.گفتيم که کارت گرافيک ،هارد ،cpu و …(اشيا) کتار هم يک کيس (برنامه ) را مي سازند.حالا اگر کارت گرافيک را در نظر بگيريم ،از يک برد اصلي و تعدادي خازن و ترانزيستور و … در روي آن تشکيل شده است.کلاس نيز همينطور.کلا در داخل کلاس دو چيز داريم:1.متغير 2.تابع .اينها را در برنامه نويسي رويه اي يا همان معمولي هم داريم و کارشان هم يکي است ،پس براي ايجاد تفاوت ،متغيرهاي داخل کلاس را خصيصه و توابع داخل آن را ،متد مي گويند.
ساختار يک کلاس
1.خاصيت ها – 2.متدها
در تصوير يک کلاس ساده را مي بينيد که از يک خاصيت و يک متد تشکيل شده است.براي تعريف متغير در کلاس ،از کلمه var استفاده مي کنيم.براي تعريف متد هم از همان function مشهور {-29-} .ابتدا يک متغير با نام name تعريف کرديم و سپس يک متد با نام printname که قرار است مقدار متغير را برگداند.در گام بعدي از اين کلاس یک شی می سازیم و name می چاپیم !

ایجاد اولین شی

در بالا یک کلاس ساده بنام MyClass ایجاد کردیم که دارای یک خاصیت بنام name و یک متد بنام printname بود.حالا می خواهیم از روی کلاس یک شی ساخته و مقدار خاصیت name را چاپ کنیم.اول از همه خواهش می کنم از این به بعد کدهای داخل عکس را خودتان بنویسید تا بهتر یاد بگیرید.بدون تمرین نمی شود برنامه نویس خوبی شد.برای شروع کدهای کلاس قبلی را در فایلی بنام دلخواه مثل class1.php ذخیره کنید.حالا کدهایی که در تصویر روبرو می بینید را در فایل دیگری ذخیره کنید.
شرح کدها:
این فایل کلا حدود 3 خط کد دارد که:خط 3:فایل حاوی کلاس را ضمیمه برنامه می کنیم.
خط 5:یک شی جدید از کلاس MyClass را ایجاد کرده و در متغیر myobject قرار می دهیم
خط 7:وقتی شی را از روی کلاس ایجاد کنیم ،زین پس تمام متدها و متغیرهای داخل کلاس از طریق شی قابل دسترسی هستند.برای همین در این خط از طریق شی به متد printname دست یافته و با echo مقدار برگشتی آن را نمایش دادیم.اگر برنامه صحیح کار کند باید مقدار “ali” را نمایش دهد.اگر خطایی بود ،حتما همینجا مطرح کنید.این ساده ترین شکل از برنامه نویسی شی گرا بود

در همین رابطه :   آموزش آسان PHP / MySQL - بخش اول

متد سازنده

متد سازنده اولین متدی است که اگر ایجاد شده باشد، هنگام ایجاد شی ،از کلاس فراخوانی می شود.اغلب برنامه نویسان از این متد برای عملیاتی مثل مقدار دهی اولیه خاصیت های شی استفاده می کنند.یک متد سازنده می تواند برای مقداردهی اولیه، آرگومنت هایی را نیز دریافت کند(در ادامه خواهد آمد).البته در PHP4 نمی توان از کلمه construct استفاده کرد و هر متدی که همنام خود کلاس باشد ،متد سازنده خواهد بود.در PHP5 هر دو پشتیبانی می شوند.برای ارسال آرگومنت به یک متد سازنده کافیست هنگام ایجاد شی ،یک پرانتر باز کرده و مقادیر مورد نظر را قرار دهید و آن را ببندید.در کد روبرو می بینید که ابتدا مقدار ali به شی داده شده است و در متد سازنده توسط متغیر $name دریافت شده است.
نکته:متد سازنده نمی تواند مقداری را برگرداند.
در ضمن اگر دقت کرده باشید، در این کد روش دسترسی به متدها در داخل یک کلاس را هم نشان دادیم،با کلمه رزرو شده self و همچنین یک ثابت تعریف کرده ایم تا با ثابت ها هم آشنا شوید.ثابت ها با کلمه const تعریف میشوند و باید مقدار اولیه داشته باشند+برای دسترسی به ثابت،ایجاد شی لازم نیست

پایگاه داده

در شروع ایجاد وبلاگ می خواهیم ساختار دیتابیس مان را مشخص کنیم.چه جدول هایی داخل ان لازم داریم،ارتباط شان چگونه خواهد بود و … اول از همه جدولی برای نگهداری پست ها لازم داریم.هر پست وبلاگ چند عنصر دارد:1.عنوان 2.متن پست 3.نویسنده 4.تاریخ ارسال .حالا فرض کنید یک بنده خدا می خواهد در وبلاگ شما مطلبی بفرستد و بنام خودش.پس یک جدول جداگانه هم نیاز داریم تا اطلاعات نویسندگان را نگه دارد.حالا چگونه این ها را به هم وصل کنیم ، لطفا همین جا نگه دارید تا به یک مفهوم اساسی در پایگاه های داده برسیم که درکش کلید فتح دنیای دیتابیس هاست :)
ارتباط جداول با هم کلا 3 نوع است :

1.یک به یک

2.یک به چند

3.چند به چند

دو جدول را در نظر بگیرید .A و B. در نوع اول به ازای هر رکورد در جدول A ،فقط 0 یا یک رکورد در جدول B وجود دارد.در نوع دوم به ازای یک رکورد از جدول A ،صفر،یک یا چند رکورد در جدول b وجود دارد(مثل همین جدول نویسندگان) و در نوع سوم به ازای چند رکورد از جدول A ،صفر،یک یا چند رکورد هم در جدول B موجود است

بعد از اشاره ای که به روابط جداول کردیم ،می خواهیم فکری هم برای تگ ها(tag) های پست ها بکنیم، پست بی برچسب مثل خامه بی عسله ! شاید بگید که یه فیلد به جدول پست هامون اضافه کنیم و برچسب را داخلش قرار دهیم،ولی اگر یک پست بود و چند برچسب ،آن موقع چکار کنیم ،شاید بفرمایید که بین شان علامتی مثل ویرگول،خط تیره یا … می گذاریم و جدایشان می کنیم.بسیار عالی ولی فکر افزونگی داده را کرده اید ؟ شاید چند برچسب بودند که بین خیلی از پست ها مشترک هستند و با این روش فقط آنها را تکرار بیهوده کرده ایم.در ضمن مشکل دیگر این روش این است که قدرت مانور ما را می گیرد.یعنی اگر بخواهیم این برچسب را ویرایش یا حذف کنیم ،باید تک تک پست ها را جستجو کرده و آن را بیابیم و سپس پاک کنیم.همانطور که می دانید ،راه حل بهتر این است که یک جدول جداگانه برای تگ ها داشته باشیم و به وسیله یک کلید آن را به جدول پست ها متصل کنیم.فرضا فقط یکبار برچسب php را به آن اضافه کنیم و در دفعات بعد فقط آن را به پست مرتبط کنیم نه عینا در کنارش ذخیره کنیم.اینطوری اگر در جدول برچسب ها یکی را ویرایش کنیم به صورت خودکار به همه پست ها اعمال می شود.

افزونگی داده

در بخش قبل به این رسیدیم که باید ساختار جداول را بهینه کنیم.البته طراحی پایگاه داده بحث بزرگ و دامنه داری است که نه در تخصص بنده است و نه اینجا فرصت بیان کامل اش وجود دارد.ولی سعی می کیم تا جایی که امکانش هست و بلدم و به کارمان می آید،عرض کنم.در این قسمت کمی در مورد افزونگی داده(Data redundancy) بحث می کنیم.به طور ساده افزونگی داده یعنی اینکه ما داده هایی داریم که غیر ضروری و تکراری و شاید بدون استفاده هستند و فقط حجم و منابع ما را اشغال می کنند.برای توضیح بهتر یک شکل آماده کردم تا درک مطلب ساده تر باشد.مثلا موضوع انتخاب واحد دانشجو را در نظر بگیرید.می خواهیم اطلاعات آن را در دیتابیس ذخیره کنیم.مثل عکس روبرو ،دو راه وجود دارد.یکی اینکه جدولی مثل جدول بالایی بسازیم و یکی اینکه 3 جدول بسازیم و بین شان رابطه ایجاد کنیم.مشکل افزونگی داده در راه حل اول با کادر قرمز مشخص شده است.یعنی این داده ها غیر ضروری هستند.روش دوم که بهتر است و مشکل راحل می کند ،استفاده از یک جدول رابط می باشد که به جای اطلاعات فردی ،فقط شماره عناصر را درش وارد کردیم و در مواقع نیاز بیرون می کشیم

جداول مورد نیاز وبلاگ

در بحث های قبلی وارد نحوه طراحی بهینه ی پایگاه داده شدیم.با توجه به بحث هایی که شد ،شاید زمان انجام یک پروژه عملی رسیده باشد.بله ،درست حدس زدید می خواهیم در مورد جداول وبلاگ مان صحبت کنیم.برای اینکه بدانیم به چه جداولی نیاز داریم ،باید بدانیم قرار است چکار کنیم؟ ما یک وبلاگ می خواهیم که اطلاعات پست (blog_posts) ،برچسب های پست(tags) و نویسنده آن(peoples) را از دیتابیس بخواند و نمایش دهد.ولی به یک جدول جنجالی دیگر به عنوان جدول واسط نیاز داریم تا جدول tags و blog_posts را به هم ربط دهد.پس 4 جدول نیاز داریم.سعی می کنم در مورد نوع فیلد ها کمی توضیح دهم.فیلد id که در تمامی جداول هست ،معمولا از نوع int با طول 11 رقم می باشد و باید به صورت auto_increment و primary بسازیم تا خود به خود اضافه شده و غیر تکراری هم باشد.عناوین ،نام و … که احتمال می دهیم طول زیادی ندارند،varchar(x) هستند.متن های طولانی از نوع text و تاریخ نیز date می باشد

در همین رابطه :   چگونه : با تاریخ در PHP و MySQL کار کنیم ؟

ساختار فایل های وبلاگ

حالا می رسیم به شروع کد نویسی وبلاگ.اول ساختار پوشه برنامه را تعیین می کنیم.در پوشه اصلی یک فایل index.php و یک پوشه includes خواهیم داشت.داخل پوشه includes فایل های مورد نیاز برنامه مثل blogpost.php,includes.php,template-engine.php,template-blogindex.tpl و استایل و عکس ها هستند،همین ! اول از فایل includes.php شروع می کنیم که تقریبا نقش واسط کلاس و برنامه اصلی را بازی می کند+ اینکه وظیفه اتصال به دیتابیس را نیز بر عهده دارد.در این فایل تعیین خواهیم کرد که چه اطلاعاتی را می خواهیم از دیتابیس بگیریم.کل پست ها ، پست های دارای یک tag خاص و یا یک پست خاص .البته فعلا فقط با گزینه اول کار داریم.فایل دیگر blogpost.php است که صرفا حاوی کلاس blogpost است.البته نام کلاس و فایل ربطی به هم ندارند ولی برای وضوح بیشتر بهتر است نام کلاس در نام فایل هم باشد.در فایل template-blogindex.tpl کدهای html سایت به صورت خالص قرار گرفته اند که در ادامه در این زمینه توضیح خواهیم داد.در فایل template-engine.php نیز کلاس موتور قالب قرار دارد.در فایل index.php هم فایل includes.php را الحاق می کنیم و به وسیله آن شی مورد نظرمان را از کلاس ایجاد کرده و پست ها را می خوانیم.در شکل روبرو ساختار کلی فایل ها و توابع و متغیرهای داخل شان و نیز ساختار کلاس را مشاهده می کنید.کلاس ما 6 و یک متد دارد.

فایل includes.php و بررسی آن

اول نحوه کار برنامه را شرح دهیم.وقتی یکی وارد وبلاگ شد،فایل index.php اجرا می شود.ابتدای آن ما فایل includes.php را به آن الحاق می کنیم که شامل ارتباط به دیتابیس و تعریف تابع GetBlogPosts است.بعد همین تابع را اجرا می کنیم تا با توجه به آرگومنت هایی که به آن می دهیم،3 کار را برای ما اجرا کند که مهمترین آنها ، لیست همه پست هاست.در این تابع ،به تعداد همه پست ها ،شی ای از روی کلاس BlogPost ایجاد می کنیم و داده هایی را که از دیتابیس گرفته ایم به آن می دهیم و اطلاعات برگشتی از شی را داخل یک آرایه قرار میدهیم.حالا این آرایه را به صفحه index.php می دهیم و در آنجا توسط یک حلقه foreach ،آرایه را که شامل تعدادی شی است ،چاپ می کنیم.

در کدهای پایین فایل includes.php را مشاهده می کنید که باید آن را در ساختاری که قبلا گفته شد ،قرار دهید.

خط 2:الحاق کلاس

خط 5-7:ارتباط و انتخاب دیتابیس

خط 9-31:تابع مربوطه

خط 11-14:مشاهده کامل پست

خط 15-18:استخراج پست ها بر پاسه tag

خط 19-22:دریافت همه پستها

خط 27-28:ایجاد شی و پاس دادن داده ها به آن و قرار دادنش در یک متغیر..

<?php
include 'blogpost.php';

// Change this info so that it works with your system.
$connection = mysql_connect('localhost', 'root', '') or die ("<p class='error'>Sorry, we were unable to connect to the database server.</p>");
$database = "blog";
mysql_select_db($database, $connection) or die ("<p class='error'>Sorry, we were unable to connect to the database.</p>");

function GetBlogPosts($inId=null, $inTagId =null)
{
	if (!empty($inId))
	{
		$query = mysql_query("SELECT * FROM blog_posts WHERE id = " . $inId . " ORDER BY id DESC");
	}
	else if (!empty($inTagId))
	{
		$query = mysql_query("SELECT blog_posts.* FROM blog_post_tags LEFT JOIN (blog_posts) ON (blog_post_tags.blog_post_id = blog_posts.id) WHERE blog_post_tags.tag_id =" . $inTagId . " ORDER BY blog_posts.id DESC");
	}
	else
	{
		$query = mysql_query("SELECT * FROM blog_posts ORDER BY id DESC");
	}

	$postArray = array();
	while ($row = mysql_fetch_assoc($query))
	{
		$myPost = new BlogPost($row['id'], $row['title'], $row['post'], $row['post'], $row["author_id"], $row["date_posted"]);
		$postArray[]= $myPost;
	}
	return $postArray;
}
?>

فایل index.php وبلاگ

در این قسمت در مورد فایلی که نقش وبلاگ ما را بازی می کند ،صحبت کنیم.همانطور که می دانید وقتی کاربر وارد سایت می شود ،اول فایل index اجرا می شود.پس این فایل باید طوری نوشته شده باشد که قابلیت نمایش صحیح موارد مورد نیاز ما را داشته باشد.پس باید در این فایل از ساختار معمول HTML که شامل html,head,body است ،استفاده کنیم ولی نمی کنیم ! زیرا می خواهیم کار تمیزتری انجام دهیم و آن هم اینکه کدهای php را با کدهای html مخلوط نکنیم.در بخش php اول باید تابع GetBlogPost را فراخوانی کنیم و چون داخل فایل includes.php قرار دارد ، اول این فایل را به برنامه الحاق می کنیم.مقدار برگشتی این تابع یک آرایه شامل اشیائی است که از روی کلاس BlogPost ساخته شده اند.بنابراین با یک حلقه foreach ،به نوبت به مقادیر آرایه دسترسی پیدا کرده و خصیصه هایی را که قبلا مقدار دهی شده اند ، چاپ می کنیم.دقت کنید علت اینکه از علامت “->” استفاده کرده ایم ، این است که با شی طرف هستیم و نه با متغیر های ساده.
کدهای روبرو را در یک فایل بنام index.php کنار پوشه includes ذخیره کنید (نه داخل آن) .
نکته دیگر این است که تابع GetBlogPost بر اساس پارامترهایی که دریافت می کند،3 کار مختلف انجام می دهد …..

<?php
include ("includes/includes.php");
include ("includes/template-engine.php");

$blogPosts = GetBlogPosts();
$template  = new template();

$html='';
foreach ($blogPosts as $post)
{
$html.= "<div class='post'>";
$html.= "<h2>" . $post->title . "</h2>";
$html.= "<p>" . $post->post . "</p>";
$html.= "<span class='footer'>Posted By: " . $post->author . " Posted on: " . $post->datePosted . " Tags: " . $post->tags . "</span>";
$html.= "</div>";
}
$template->assign(array(
    'title'   => 'My Simple Blog !',
    'header'  => 'UME blog !',
    'posts' => $html
	));

$template->display('includes/template-blogindex.tpl');
?>

فایل blogpost.php ،حاوی کلاس اصلی

حالا رسیدیم به مهمترین بخش کارمان که همان کلاس BlogPost است.اگر به کدهای فایل includes.php نگاه کنید (سطر 27) خواهید دید که ما اطلاعات را از دیتابیس می خوانیم و همه آنها را همزمان با ایجاد شی از روی این کلاس ، به عنوان آرگومنت به آن می دهیم.همانطور که می دانید،این داده ها اول از همه به متد سازنده کلاس می رسند و در آنجا در دسترس هستند.برای همین کلاس ما فقط یک متد دارد و آن هم متد سازنده است و نیازی به متد دیگر نداریم.این کلاس داده های ارسالی را متسقیما در خصیصه هایی قرار می دهد ویا بعد از انجام یک سری عمل ،این کار را می کند.مثلا نحوه نمایش تاریخ را بهبود می دهد،نام و نام خانوادگی نویسنده را بیرون می کشد و تگ های هر مطلب را نیز استخراج می کند.در آخر نیز همه آنها را در 6 خصیصه جداگانه ذخیره می کند و چون در فایل includes.php در حلقه ، به تعداد پست ها ،شی می سازیم،پس خصایص داخل هر شی نیز حاوی داده های مربوط به خودش است و تداخلی ایجاد نمی شود.
از =null هم در آرگومان های متد،به این دلیل بهره بردیم که اگر یکی را نفرستادیم ، خطا ایجاد نشود.

<?php

class BlogPost
{

public $id;
public $title;
public $post;
public $author;
public $tags;
public $datePosted;

function __construct ($inId=null, $inTitle=null, $inPost=null, $inPostFull=null, $inAuthorId=null, $inDatePosted=null)
{
if(!empty ($inId))
{
$this->id = $inId;
}
if (!empty($inTitle))
{
$this->title = $inTitle;
}
if (!empty($inPost))
{
$this->post = $inPost;
}
if (!empty($inDatePosted))
{
$splitDate = explode ("-", $inDatePosted);
$this->datePosted = $splitDate[1] . "/" . $splitDate[2] . "/" . $splitDate[0];
}
if (!empty($inAuthorId))
{
$query = mysql_query("SELECT first_name, last_name FROM people WHERE id = " . $inAuthorId);
$row = mysql_fetch_assoc ($query);
$this->author = $row["first_name"] . " " . $row["last_name"];
}
$postTags = "No Tags";
if (!empty($inId))
{
$query = mysql_query("SELECT tags.* FROM blog_post_tags LEFT JOIN (tags) ON (blog_post_tags.tag_id = tags.id) WHERE blog_post_tags.blog_post_id = " . $inId);
$tagArray = array();
$tagIDArray = array();
while ($row = mysql_fetch_assoc($query))
{
$tagArray[]=$row["name"];
$tagIDArray[]=$row["id"];
}
if (sizeof($tagArray) > 0)
{
foreach ($tagArray as $tag)
{
$tagArray[]=$row["name"];
$tagIDArray[]=$row["id"];
}
if (sizeof($tagArray) > 0)
{
foreach ($tagArray as $tag)
{
if ($postTags == "No Tags")
{
$postTags = $tag;
}
else
{
$postTags = $postTags . ", " . $tag;
}
}
}
}
$this->tags = $postTags;
}
}
}
?>

فایل template-engine.php – فایل حاوی کلاس موتور

حالا تنها قسمت نمایش و قالب آن باقی مانده است که در ادامه کم کم آن را نیز کامل خواهیم کرد تا کارمان تمام شود.کاری که می خواهیم انجام دهیم این است که کدهای html را از کدهای php جدا کنیم تا ویرایش و تغییر قالب آسانتر شود.البته مقیاس کار کوچک است و برای همین خودمان یک موتور ساده خواهیم نوشت که برگشتی هم به بحث شی گرایی دارد، ولی در کارهای بزرگ بایستی از موتورهای قالب حرفه ای مثل Smarty استفاده شود. در این قسمت کدهای موتور قالب را مشاهده می کنید.این کلاس که template نام دارد ، تقریبا نقش واسط را بازی می کند.یعنی کدهای html را از یک فایل دیگر و اطلاعات خوانده شده از دیتابیس را از php گرفته و با هم مخلوط کرده ،نمایش می دهد.لطفا کدهای روبرو رو در یک فایل بنام template-engine.php داخل پوشه includes ذخیره کنید.

<?php
class template
{
    var $tpl_vars;

    function template()
    {
        $this->tpl_vars = array();
    }

    function assign($var_array)
    {
        if (!is_array($var_array))
        {
            die('template::assign() - $var_array must be an array.');
        }
        $this->tpl_vars = array_merge($this->tpl_vars, $var_array);
    }

    function parse($tpl_file)
    {
        if (!is_file($tpl_file))
        {
            die('template::parse() - "' . $tpl_file . '" does not exist or is not a file.');
        }
        $tpl_content = file_get_contents($tpl_file);

        foreach ($this->tpl_vars as $var => $content)
        {
            $tpl_content = str_replace('{$' . $var . '}', $content, $tpl_content);
        }
        return $tpl_content;
    }

    function display($tpl_file)
    {
        echo $this->parse($tpl_file);
    }
}
?>

فایل template-blogindex.tpl، قالب وبلاگ

همانطور که قرار بود ، می خواهیم کدهای html را از php جدا کنیم و این می تواند به مراتب کدهای ما را استاندارد تر کند تا مخلوطی از کدهای مختلف و رنگارنگ 🙂 نداشته باشیم. در قسمت قبل ،کدهای کلاس اصلی را که وظیفه تلفیق و جاگذاری نتایج برگشت داده شده از php و html را بر دوش دارد ، با هم بررسی کردیم .حالا فایل قالب را خواهیم دید که فقط شامل کدهای html و سه متغیر مانند است که با نتایج تعویض خواهند شد . در آینده فایل index.php را خواهیم دید که در آن ،یکی یکی متغیر های مورد نظرمان را به این متغیر مانندها پاس می دهیم .در شکل روبرو آنها را با دایره های زرد رنگی مشخص کرده ایم .لطفا کدهای زیر را با نام template-blogindex.tpl و داخل پوشه includes ذخیره کنید.
اگر توجه کنید این فایل حاوی هیچ گونه کد php و … نیست .

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:"//www.w3.org/TR/xhtml1/DTD/xhtm1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>{$title}</title>
<link rel="stylesheet" href="includes/style.css" type="text/css" media="screen" charset="utf-8" />
</head>
<body>

<div id="main">
<h1>{$header}</h1>
<div id="blogPosts">

{$posts}

</div>
</div>

</body>
</html>

شیوه نامه و عکس های مربوط به وبلاگ

در آخرین قدم از طراحی وبلاگ ، رسیدیم به اضافه کردن فایل css و دو عکس ساده برای زیباتر کردن کارمان.این فایل ها و نیز دیگر فایل های این آموزش در زیر برای دانلود شما قرار گرفته اند.می توانید از آنجا دانلود کنید فقط برای برای یادگیری بهتر پیشنهاد می کنیم کدها رو خودتان قدم به قدم بسازید و با روند کار آشناتر شوید.

در همین رابطه :   چگونه در PHP نوع Array را به Object و نوع Object را به Array تبدیل کنیم؟

نتیجه نهایی :

کار وبلاگ مان تمام است.ما را از نظرات تون بهره مند کنید 🙂

دسته بندی : PHP

45 نظر

  1. با تشکر از آموزش خوبتون. فقط من یه نکته به دوستان یاد آوری کنم. اونهم اینکه دوستان نباید بترسن و شروع کنن اولین پروژه oop شون رو بنویسن تا یواش یواش دستشون عادت کنه. وگرنه ده تا هم مطلب بخونن باز یه ذره می ترسن!
    موفق باشید.

    1. ممنونم از شما دوست عزیز . موافقم کار وب کاملا عملی هست و تا کدنویسی نشه نمیشه یاد گرفت

  2. من که به شدت به سایتتون علاقه مند شدم.هرچند تازه با سایت شما آشنا شدم اما کار شما بی نظیره واقعا.مرسی از سایت عالیتون.
    سایت شما رو به همه دوستانم معرفی می کنم

  3. من که به شدت به سایتتون علاقه مند شدم.هرچند تازه با سایت شما آشنا شدم اما کار شما بی نظیره واقعا.مرسی از سایت عالیتون.
    سایت شما رو به همه دوستانم معرفی می کنم.

  4. سلام

    مطلب خوبی بود . ولی اگه فقط به ترجمه کردن اکتفا نمی کردید خیلی عالی می شد.

    این پروژه ای که ترجمه کردید فقط کد نوشته شده خیلی از کدها دربارشون توضیح داده نشده.

  5. سلام رفیق.شما تا حالا با Qtكار كردی؟چند تا سوال داشتم.اگه خودتون کار نکردید می تونید کسی رو بهم معرفی کنید که کار کرده باشه.اگه میشه از طریق ایمیلم بهم خبر بدید.ممنون میشم.

  6. بازتاب: دیزاین فا » Blog Archive » آموزش کامل برنامه نویسی یک وبلاگ با php به صورت شی گرا(OOP)
  7. بازتاب: آموزش کامل برنامه نویسی یک وبلاگ با php به صورت شی گرا(OOP) - دیدنی ها ، سایت سرگرمی و تفریحی ایرانی
  8. سلام خسته نباشید یه سوال داشتم؟ چرا تو وبلاگای پارسفا نمیشه نظر گذاشت؟ اگه به وبلاگم بیاین منظورمو متوجه میشین میشه درستش کرد؟؟؟؟؟؟؟؟ خیلی ضد حاله که دوستام نمیتونن نظر بزارن

    1. سلام
      ممنون ، وبلاگتون مثل بقیه وبلاگ های این سرویس دهنده هست و امکان نظر دادن ندارد . علتش رو نمی دونم و پیشنهاد می کنم از صفحه اصلی سایت شون از منوی بالا و تماس با ما از شون بپرسین یا به یک سرویس دهنده معتبرتر منتقل بشید

  9. سلام جناب زمانی عزیز.
    در بین متن اشاراتی به مطالب پیش گفته داشتید که هرچی توی سایت گشتم مطلبی در این رابطه مشاهده نکردم.
    لطفا در صورت امکان مطالب مرتبط با موضوعات مختلف و همنین مطالب به هم پیوسته را در ذیل مطالب مشخص نمائید.
    باتشکر

  10. سلام
    حتی کامپیوتر رو وقتی تو حالت standby میزارم بازم تنظیمات wampاز کار می افته ممکنه نسخه دانلود شده خراب باشه ؟میتونم نسخه کاری شما رو دانلود کنم؟آخه برای پروژه میخوامش:)

    1. کمی عجیبه ! یعنی بعد خاموش و روشن کردن کامپیوتر، کلا نمی تونین فایل اجرایی برنامه را پیدا کنین ؟!

  11. منظورم از اینکه تنظیماتش غیر فعال میشه اینکه بعد از خاموش وروشن کردن مجدد کامپیوتر دیگهapach7my sqlکار نمیکنه وحتی از روی گزینه هایی که داره مجدد inestal نمیشه ومجبورم کلا دوباره نرم افزار رو نصب کنم نمیدونم چرا اینجوری میشه
    ممکنه به خاطر iis باشه ؟ولیlocalhostکار میکنه الان مشکل من وقتی که کامپیوتر رو خاموش میکنم ودوباره میخوام از wampاستفاده کنم؟

    1. احتمالا به این خاطر باشه که در startup یا همون شروع به کار ویندوز ، ومپ خودکار اجرا نمیشه . بعد از بالا اومدن ویندوز می تونید برید به منوی start> all programs و wamp رو پیدا کرده و اجرا کنید احتمالا مشکل تون حل میشه .می تونید یه میانبر از برنامه اش رو هم داخل پوشه windows/startup کپی کنید تا موقع شروع ویندوز خودکار اجرا بشه.
      البته من خودم هیچ وقت کامپیوتر رو shutdown نمی کنم و همیشه از hibernate یا خواب زمستانی استفاده می کنم تا وقتی دوباره کامپیوترو روشن کردم ، برنامه ها باز باشن . می تونید توی تنظیمات screensaver و بعد power options پیداش کنید

  12. سلام
    من نرم افزار wampرو نصب کردم اما متاسفانه زمانیکه localhost رو روی اینترنت میزنم عمل نمیکنه بااینکه تمامی php&apach7my sqlبصورت فعال هستن؟
    ویه سوال دیگه اینکه وقتی کامپیوتر رو خاموش روشن میکنم تمامی تنظیماتش غیر فعال میشه تورو خدا راهنماییم کنید

    1. سلام
      منظورتون از اینکه روی اینترنت می زنید چیه ؟ وقتی ومپ نصب می شه ، برای ما یه سرور (آپاچی) ، یک مفسر زبان php و یک پایگاه داده (mysql) نصب می کنه پس نیازی به اینترنت نیست و اگر قطع هم باشه ومپ کار خواهد کرد . فقط باید در آدرس بار مرورگر ،آدرس http://localhost رو بزنید تا صفحه ومپ نشون داده بشه . البته به آیکون ومپ هم کنار ساعت دسکتاپ دقت کنید که سبز باشه .
      متوجه نمی شم منظورتون چیه از اینکه تنظیماتش غیر فعال میشه

  13. سلام من میخوام نرم افزار php رو نصب کنم اما به مشکل بر میخورم اگه میشه کامل مراحل نصب رو بهم بگید لازم دارم فوری

    1. سلام
      سرع ترین راه حلی که میشه پیشنهاد کرد اینه که همه نرم افزارهای فعلی اعم از apache,php و mysql رو اگر نصب کردید ، پاک کنید و نرم افزار WAMP رو دانلود کرده و نصب کنید . در داخل این نرم افزار همه برنامه های لازم برای اجرای php هست

  14. راستش من خیلی خیلی در زمینه وب مبتدی هستم ولی فکر نکنم زیاد سخت باشه برای پروژه هم وقت زیادی ندارم الان صفحه اصلی را طراحی کردم ولی نمی دونم حالا باید چیکار کنم الانم تازه سایت شما رو دیدم

      1. سلام
        من منتظر جواب و راهنمایی شما هستم راستش من تو کد نویسی مشکلی ندارم فقط در تجزیه و تحلیل آن مشکل دارم مطالب شمارا هم خوندم خیلی کمکم کرد میشه در مورد هر صفحه ای که قرار کاربر از پنل سمت چپ مثل پنل بلاگفا کلیک میکنه یک صفحه جدید باز میشه راجب این طور مسائل مشکل دارم
        لطفاً سریع جواب دهید

        1. سلام
          حتما فقط اگه ممکنه یکبار سوالتون رو واضح بیان کنین تا بنده اگه بتونم راهنمایی کنم.
          اگر هم مایل باشید مستقیما مطرح کنید آی دی بنده اینه : [email protected]
          در خدمتم

  15. شما که php کار می کنید یک سوال داشتم که اگر جواب بدین ممنون میشم. چطور تو برنامه php می تونم از فایل dll استفاده کنم؟ و توابعش رو فراخوانی کنم؟

    متشکر

  16. سلام

    دستتون درد نکنه. عالی بود. تو وب کمتر آموزشی اینقدر با حوصله و کامل پیدا میشه استفاده کردم

  17. هو،
    سلام علیکم،

    باریک الله،علی آقای فعال و مفید 😉

    “ستاد بهره مند سازی سایتها از نظرات :دی ”

    یا حق ج

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *