آموزش ساخت سي ام اس خبري – قسمت چهارم


در اين بخش قصد داريم اطلاعات لازم را از ديتا بيس دريافت و به وسيله کلاس تمپليت نمايش دهيم
در صفحه اصلي قراره :
1. اخبار رو نمايش بديم
2. صفحه بندي رو که قبلا توضيح داده شد نمايش بديم
3. يک آرشيو به صورت تقويم داشته باشيم
4.آخرين مطالب ارسالي رو مشخص کنيم
5.آرشيو بر اساس تاريخ داشته باشيم
6.آمار
6.نظر سنجي
(پس از پايان اين پروژه نسخه هاي کامل تري خواهيم ساخت)

مثل هميشه بايد اول به ديتا بيس متصل بشيم!
خوب ديگه از توضيح موارد تکراري خودداري کنيم…
نکته مهم اينجاست که در تمام فايل ها که قراره 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    = "5";
$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        = "10";
//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    = 3.5;
?>

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

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

سه ورودي گرفتيم.اولي نوع نمايش مثلا 26 تير 1387 يا 26/04/1387 .دومي تاريخ که به صورت 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 == "0"){$start_news = "0";}
else {
$start_news = $start-1;
}

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

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

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

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

mysql_query
اين تابع دو آرگومان مي گيرد:اولين آرگومان اجباري است که همان query جهت اجرا مي باشد که از جنس رشته مي باشد.
دومين آرگومان يک اشاره گر مي باشد که اختياري است که با mysql_connect ايجاد کرديم.
mysql_connect
نمي دونم شايد بايد اول اينو مي گفتم!
اين تابع 5 آرگومان اختياري دارد که درصورتي که اين آرگومان ها رو ارسال نکنيم مقادير پيش فرض در نظر گرفته مي شوند.
تا جايي که من يادم هست مقادير پيش فرض به شرح زير است:
سرور :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 مي گيم از کجا تا کجا انتخاب بشه.يعني مثلا از شماره 2 تا 10 .اگه اين رو مشخص نکنيم از صفر تا آخر انتخاب مي شه.
در جلسه قبل يکي از دوستان تابع 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( 10 ) NOT NULL DEFAULT '0';

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

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

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

کد PHP:
    $lastq = mysql_query("SELECT * FROM data ORDER BY id DESC LIMIT  0,$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();

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

نظرات کاربران :

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

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.