کد خبر: 197
تاریخ انتشار: ۵ خرداد ۱۳۹۱ - ۱۱:۵۲


در این بخش قصد داریم اطلاعات لازم را از دیتا بیس دریافت و به وسیله کلاس تمپلیت نمایش دهیم
در صفحه اصلی قراره :
۱٫ اخبار رو نمایش بدیم
۲٫ صفحه بندی رو که قبلا توضیح داده شد نمایش بدیم
۳٫ یک آرشیو به صورت تقویم داشته باشیم
۴٫آخرین مطالب ارسالی رو مشخص کنیم
۵٫آرشیو بر اساس تاریخ داشته باشیم
۶٫آمار
۶٫نظر سنجی
(پس از پایان این پروژه نسخه های کامل تری خواهیم ساخت)

مثل همیشه باید اول به دیتا بیس متصل بشیم!
خوب دیگه از توضیح موارد تکراری خودداری کنیم…
نکته مهم اینجاست که در تمام فایل ها که قراره include بشوند ما از صحت وجود یک ثابت صحبت کردیم.
اینجا دقیقا صفحه ای است که باید ثابت توضیح داده شده در ” آموزش ساخت cms خبری – قسمت دوم ” رو ایجاد کنیم.

کد PHP:
define('news_security',true);

تفاوت include و require :
توابع include و require تنها یک آرگومان ,آن هم اجباری, به عنوان ورودی که مسیر فایل و از نوع رشته می باشد دریافت می کنند.
هر دو تابع شبیه هم عمل می کنند با این تفاوت که در صورتی که تابع include قادر به پیدا کردن فایل نشود خطای مهلکی ایجاد نمی کند و برنامه ادامه کار می دهد ولی require در صورت پیدا نکردن فایل اجرای برنامه را فورا تمام می کند.
چند فایل رو include می کنیم که در آینده نوبت اونها هم می رسه.

کد PHP:
    include("includes/config.php");
include("includes/template.php");
include("includes/page.php");
include("includes/count.php")
include("includes/cal.php");
include("includes/poll.php");
include("includes/jdf.php");

در مورد فایل هایی که هنوز نساختیم یا متغیر هایی که در همین جلسه ذکر می شوند ولی ساخته نمی شوند می تونید فایل های خالی و متغیر های الکی تعریف کنید که با خطا مواجه نشید.
ابتدا کلاس تمپلیت و توضیحات را از آدرس http://www.forum.rightclick.ir/topic-847-0.html در یافت کنید.
کلاس رو در پوشه includes با نام template.php ذخیره کنید.
قبل از هر چیز بگم که در پایان تاپیک بعدی لینک فایلی رو می گذارم که تمام قسمت های توضیح داده شده رو شامل می شود.این لینک در هر جلسه بروز می شود.
این قالب هم ضمیمه همین فایل شده.
حالا با توجه به توضیحات آدرس داده شده قالب رو باز می کنیم.و چند متغیر رو در قالب جاسازی می کنیم.

کد PHP:
$MyTpl = new Template();
$MyTpl -> load_file( 'template/main.htm' );
$MyTpl -> assign( array(
'sitetitle' => $sitetitle,
'sitedescription' => $sitedes,
'sitekeywords' => $sitekey
)

توضیحات : در خط اول که کلاس رو صدا می زنیم.در خط دوم تابعی هست که در کلاس ساخته شده و فایل رو باز میکنه.در مورد کار با فایل ها در یکی از جلسات کامل توضیح می دم.در خط سوم هم که assign رو که در آموزشی که لینک دادم توضیح داده شده .پس اگه فعلا جایی رو نفهمیدید جای نگرانی نداره!
البته ما از سه متغیر که تعریف نکردیم استفاده کردیم.این رو به حساب فراموش کاری من نزارید!
چون تصمیم گرفتم چند امکان کوچیک به پروژه کوچیکمون اضافه کنم باید چند متغیر رو در در فایل config.php که قبلا آموزش دادم اضافه کنیم.
حالا فایل نهایی config.php رو می نویسم:

کد PHP:
<?php
//     Security
if ( !defined('news_security'))
{
die("You are not allowed to access this page directly!");
}

//     Database Information

$hostname    = "localhost";
$username    = "root";
$password    = "";
$database    = "news_cms";

//     Database Connection

$connection = mysql_connect($hostname,$username,$password) or die (mysql_error());
//    Select database
$database = mysql_select_db($database,$connection) or die (mysql_error());

//    Numbers of news in the main page
$news_limit    = "۵";
$debug_mode    = "off";
//Static conf
$static        = "on";
//Newsletter conf
$news        = "off";
//Archive conf
$Archive    = "on";
//Calender conf
$Cal        = "on";
//Last Posts
$Last        = "on";
//number of headlines in the last list
$nlast        = "۱۰";
//Comment
$Comment    = "on";
//Poll
$poll    = "on";

//Site conf
$siteurl    = "http://blog.com/projects/rsh_news_cms";
$sitetitle    = "عنوان";
$sitedes    = "توضیحات سیستم";
$sitekey    = "rh_news_cms,keyword1,keyword2,php";
$dtype    = "j F Y  ";
$tzone    = ۳٫۵;
?>

البته خبرنامه رو فعلا off کردیم تا آموزش ساخت خبرنامه تمام بشه تابعد با این پروژه ادغامش کنیم…
در مورد ساخت تابع در یکی از تاپیک ها ارسالی مطالب جالبی بود.جست جو کنید.اگه مشکلی بود در خدتم.

کد PHP:
حالا تابعی با نام mytime می سازیم.
function mytime($type,$TheTime,$TimeZone){
$mtime = $TheTime;
$mtime += $TimeZone * ۳۶۰۰;
return jdate($type, $mtime);
}

سه ورودی گرفتیم.اولی نوع نمایش مثلا ۲۶ تیر ۱۳۸۷ یا ۲۶/۰۴/۱۳۸۷ .دومی تاریخ که به صورت timestamp با تابع time در هنگام ارسال خبر می فرستیم(در این مورد مطالبی اضافه می کنم) و سومی timezone شما که بتونید زمان محلی خودتون رو داشته باشید.(تاپیک استفاده از تاریخ greenwich رو مطالعه کنید.)
حالا با if بررسی میکنیم که اگه امکاناتی که اضافه کردیم تو تنضیمات فعال هستند بلاک مربوط به اونها رو نمایش بدیم.این مرحله رو می تونیم خیلی خلاصه کنیم ولی اول باید به آموزش مربوط به اون برسیم:

کد PHP:
    if ($static == "on") { $MyTpl -> assign('Static',1); }
if ($news == "on") { $MyTpl -> assign('News',1); }
if ($Archive == "on") { $MyTpl -> assign('Archive',1); }
if ($Cal == "on") { $MyTpl -> assign('Cal',1); }
if ($Last == "on") { $MyTpl -> assign('Last',1); }
if ($Comment == "on") { $MyTpl -> assign('Comment',1); }
if ($poll == "on") { $MyTpl -> assign('Poll',1); }

و حالا چند مقدار رو به قالب می فرستیم…

کد PHP:
    $MyTpl -> assign( array(
'total_news'    => $total_pages,
'today_date'    => $today,
'today'     => $todayv,
'yes'         => $yesterdayv,
'total'         => $totalv,
'pages'     => $pagination,
'Polls'     =>    $tpoll
)
);

البته این مقادیر جز اولی و آخری رو تاحالا نساختیم پس برای سیستم ناشناخته هستند.ناچارا فعلا کاری نمی تونیم بکنیم…
برای نمایش اولین خبر اگه یادتون باشه متغیری با نام $start تعریف کردیم.حالا یک رابطه ساده برای نمایش خبر می نویسیم(چرا؟=<روش فکر کنید!)

کد PHP:
    if ($start == "۰"){$start_news = "۰";}
else {
$start_news = $start-1;
}

ادامه مطلب رو در یک پست دیگه می نویسم که تنوع ایجاد بشه!
Select
اینو قبلا یادم رفت توضیح بدم! یعنی چون قراره آموزش برای همه حتی تازه کارها(مثل من) باشه پس اینم می گم.در ضمن هر جا رو فکر می کنید کم کاری کردم لطفا بگید.

کد PHP:
Select * FROM نام جدول

با علامت * تمام فیلدهای جدول رو انتخاب می کنیم و یا می تونیم برای انتخاب یک فیلد خاص از راه زیر استفاده کنیم:

کد PHP:
SELECT نام فیلد FROM نام جدول

mysql_query
این تابع دو آرگومان می گیرد:اولین آرگومان اجباری است که همان query جهت اجرا می باشد که از جنس رشته می باشد.
دومین آرگومان یک اشاره گر می باشد که اختیاری است که با mysql_connect ایجاد کردیم.
mysql_connect
نمی دونم شاید باید اول اینو می گفتم!
این تابع ۵ آرگومان اختیاری دارد که درصورتی که این آرگومان ها رو ارسال نکنیم مقادیر پیش فرض در نظر گرفته می شوند.
تا جایی که من یادم هست مقادیر پیش فرض به شرح زیر است:
سرور :localhost :3360 (رشته)
نام کاربری : نام سیستم کاربر (پردازشگر php) (رشته)
کلمه عبور : تهی
ارتباط جدید : تهی (بولین)
نوع کلاینت : تهی (چند ثابت از پیش تعیین شده یا MYSQL_CLIENT_INTERA CTIVE)
آرگومان چهارم و پنجم رو فعلا جدی نگیرید!
می تونیم اول query رو به یک متغیر نسبت بدیم و بعد با تابع mysql_query به اجرای اون بپردازیم و یا مستقیما اون رو بنویسیم.من روش مستقیم رو ترجیح می دم.چون از متغیر زیاد بدم میاد!(آدم اسم کم میاره!)

کد PHP:
$dataq = mysql_query("SELECT * FROM data ORDER BY id DESC LIMIT  $start_news,$news_limit");

توضیحات :
اولش که مشخصه!همون که توضیح داده شد.اما با ORDER BY ترتیب رو برساس id (شماره خبر) به صورت نزولی گزاشتیم:
نزولی : DESC
صعودی : ASC
با LIMIT می گیم از کجا تا کجا انتخاب بشه.یعنی مثلا از شماره ۲ تا ۱۰ .اگه این رو مشخص نکنیم از صفر تا آخر انتخاب می شه.
در جلسه قبل یکی از دوستان تابع mysql_fetch_arrayو استفاده با حلقه for رو توضیح دادند.حالا ما از حلقه while استفاده میکنیم:

کد PHP:
    while ($mdata = mysql_fetch_array($dataq)) {
$id        = $mdata['id'];
$title        = $mdata['title'];
$author        = $mdata['author'];
$image        = $mdata['image'];
$text        = $mdata['text'];
$date        = $mdata['date'];
$num        = $mdata['num'];
//add block
$MyTpl -> add_block('Rsh',  array(
'newslink' => $siteurl."/archive.php?id=".$id,
'newstitle' => $title,
'newsbody' => $text,
'newsdate' => mytime($dtype,$date,$tzone),
'newsimg' => $image,
'author' => $author,
'num' => $num,
'id' => $id,
)
);
}

توضیحات:
$mdata متغیر دلخواه است.تا زمانی که quey ما با تابع اجرا بشه اطلاعات رو با این متغیر دریافت می کنیم.
البته مجبور به تعریف متغیر ها نیستیم ولی با این کار کد رو قابل فهم تر می کنیم.
درسته! ما ستونی با نام num نداشتیم!پس از کجا اومد؟ خوب ما برای امکان جدیدمو یعنی نظرات نیاز به نمایش تعداد نظرات ارسال شده داریم؛ پس یک ستون جدید اضافه می کنیم.برای اینکار دستور زیر رو در phpmyadmin اجرا می کنیم:

کد PHP:
ALTER TABLE `data` ADD `num` INT( ۱۰ ) NOT NULL DEFAULT '۰';

البته یادتون باشه اول به سراغ دیتا بیس برید و بعد کد رو اجرا کنید!
و اگه بخواهید php رو مجبور به انجام این کار کنید این query رو می نویسیم:

کد PHP:
$sql = 'ALTER TABLE `data` ADD `num` INT(10) NOT NULL DEFAULT \'۰\';';

برای نمایش آخرین اخبار هم کدی مشابه کد زیر رو می نویسیم:

کد PHP:
    $lastq = mysql_query("SELECT * FROM data ORDER BY id DESC LIMIT  ۰,$nlast");
while ($ldata = mysql_fetch_assoc($lastq)) {
$MyTpl -> add_block('Last',  array(
'lasturl' => $siteurl."/archive.php?id=".$ldata['id'],
'lasttitle' => $ldata['title'],
)
);
}

و در نهایت هم قالب رو پس از پردازش های بالا به خروجی می فرستیم…

کد PHP:
    $MyTpl -> print_template();

در ضمن یک شمارنده ساده هم ساختم که ضمیمه شده و در جلسات بعد به تشریح اون خواهیم پرداخت.
نکته مهم : این آموزش رو ۲ سال پیش نوشتم ولی بهرحال هنوز هم برای خیلی ها میتونه مفید باشه



نظرات بينندگان
انتشار يافته: بدون دیدگاه