Wednesday, August 22, 2012

PHP : มาสร้างปฏิทินกันเถอะ (ตอนที่ 2)

       ในบทความนี่เรามาปรับปรุงปฏิทินต่อจากบทความที่แล้วกันนะครับ ซึ่งการปรับแต่ปฏิทินในครั้งนี้เราจะใช้ เทคนิคการจัดรูปแบบเอกสารตามมาตรฐานของ WWW แบบใหม่นั่นก็คือ CSS หรือเรียกชื่อเต็มๆว่า Cascading Style Sheets โดยในส่วนของรายละเอียดในการจัดรูปแบบต่างๆนั้นขอแนะนำให้ไปศึกษาเพิ่มเติมเองนะครับ
       ทำไมถึงต้องเป็น CSS นั่นก็เพราะรูปแบบ CSS นั้นถูกนำมาใช้เพื่อเสริมการทำงานของ HTML ให้มีประสิทธิภาพมากยิ่งขึ้น โดยเน้นไปที่การจัดรูปแบบและโครงร่างของเอกสารเป็นหลัก ทำให้เราสามารถที่จะกำหนดรูปแบบเอกสารให้หลากหลายมากยิ่งขึ้น แก้ไขง่าย จัดการง่าย ควบคุมง่าย ตามสไตล์ของ CSS นั่นเอง
       สำหรับการจัดรูปแบบปฏิทินในวันนี้เราจะมาตกแต่งใส่สีสันลงไปเพื่อเพิ่มความสวยงาม โดยมีส่วนที่ต้องตกแต่งอยู่ 5 ส่วนด้วยกัน คือ

  1. ส่วนหัวปฏิทิน
  2. ส่วนหัวสัปดาห์
  3. ส่วนที่แสดงเป็นวันอาทิตย์
  4. ส่วนที่แสดงเป็นวันเสาร์
  5. ส่วนแสดงวันที่ปัจจุบัน

       เนื่องจากเราต้องจัดการกำหนดรูปแบบที่หลากหลายเช่นนี้ CSS จึงเหมาะกับการทำงานดังกล่าว เรามาลองเริ่มจัดรูปแบบปฏิทินกันเลยครับ


       ก่อนอื่นก็ใช้ไฟล์เดิมที่ทำไว้ครั้งที่แล้วในเรื่อง   PHP: มาสร้างปฏิทินกันเถอะ (ตอนที่ 1)   มาเป็นต้นแบบและปรับปรุงให้เป็นดังนี้

ซอร์สโค้ดปฏิทิน (ตอนที่ 2)
<html>
<head>
<title>ปฏิทินเบื้องต้น</title>
<style>
     .sunday{color: white;background-color:red;}
     .saturday{color: white;background-color:#9900CC;}
     .default{color: black;background-color:white;}
     .today{color: blue;background-color:yellow;}
</style>
</head>
<body>
<?
$now = strtotime("now");
$month = date('n',$now);
$year = date('Y',$now);
$first = strtotime("$year-$month-1");
$first_day = date('w',$first);
$num_day = date('t',$now);
$today = date("Y-n-j");
$TH_Day = array("อา.","จ.","อ.","พ.","พฤ.","ศ.","ส.");
$TH_Month = array(1 => "มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน",
"กรกฏาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม");
$TH_Year = $year+543;

$class = "default";
echo("<table border=1 cellspacing=0 bgcolor=#FFCC99>
<tr><th colspan=7>พุทธศักราช  $TH_Year<p>$TH_Month[$month]</th></tr>
<tr bgcolor=#FFFACD><th>" . implode("</th><th>",$TH_Day) . "</th></tr>");

$start = 1 - $first_day;
$w = 1;
for($d = $start; ;$d++){
     $class = "default";
     $date = "$year-$month-$d";

     if($w == 1){
          $class = "sunday";
          echo("<tr align=center class=$class>");
     }else if($w == 7){
          $class = "saturday";
     }else{
          $class = "default";
     }

     if($d < 1){
          echo("<td class=$class>&nbsp;</td>");
     }else if($d >= $num_day){
          if($d == $num_day){
                 if($today == $date){
                        $class = "today";
                 }
                 echo("<td align=center class=$class>$d</td>");
         }else{
                 if($w == 7){
                        $class = "saturday";
                 }else{
                        $class = "default";
                 }
                 echo("<td class=$class>&nbsp;</td>");
        }
        if($w == 7){
             echo("</tr>");
             break;
        }
    }else{
         if($today == $date){
              $class = "today";
         }
         echo("<td align=center class=$class>$d</td>");
    }

    if($w == 7){
        echo("</tr>");
        $w = 1;
    }else{
        $w++;
    }

}
?>
</table>
</body>
</html>

อธิบายการทำงาน

       สำหรับการทำงานของปฏิทินก็คล้ายแบบเดิมเพียงแต่เราได้เพิ่มส่วนที่ตกแต่งขึ้นมาเท่านั้น ผมจึงขออธิบายส่วนที่เพิ่มมาเท่านั้นนะครับ
       ส่วนแรก เราต้องทำการประกาศรูปแบบของปฏิทินเราก่อนซึ่งใส่ไว้ในแท็ก <style>โดยไว้ภายในแท็ก <head> อีกทีหนึ่ง ดังตัวอย่าง

<head>
<title>ปฏิทินเบื้องต้น</title>
<style>
     .sunday{color: white;background-color:red;}
     .saturday{color: white;background-color:#9900CC;}
     .default{color: black;background-color:white;}
     .today{color: blue;background-color:yellow;}
</style>
</head>

       ในส่วนนี้ผมได้กำหนดสีตัวอักษร และสีพื้นหลังของแต่ละส่วนคือ
วันอาทิตย์ ให้ตัวอักษรสีขาว พื้นหลังสีแดง

.sunday{color: white;background-color:red;}

วันเสาร์ ให้ตัวอักษรสีขาว พื้นหลังสีม่วง

.saturday{color: white;background-color:#9900CC;}

วันทั่วไป ให้ตัวอักษรสีดำ พื้นหลังสีขาว

.default{color: black;background-color:white;}

วันที่ปัจจุบัน ให้ตัวอักษรสีน้ำเงิน พื้นหลังสีเหลือง

.today{color: blue;background-color:yellow;}



       เริ่มสร้างปฏิทินโดยกำหนดสร้างเป็นตารางปฏิทินใส่สีที่หัวปฏิทิน และที่หัวชื่อสัปดาห์ตามต้องการ

echo("<table border=1 cellspacing=0 bgcolor=#FFCC99>
<tr><th colspan=7>พุทธศักราช  $TH_Year<p>$TH_Month[$month]</th></tr>
<tr bgcolor=#FFFACD><th>" . implode("</th><th>",$TH_Day) . "</th></tr>");


       ต่อมาผมได้เพิ่มการทำงานส่วนหนึ่งขึ้นมาคือตัวแปรสำหรับเก็บค่าวันที่ปัจจุบัน เพื่อใช้ในการตรวจสอบในขั้นตอนต่อไป คือ

$today = date("Y-n-j");

       แล้วเราจะรู้ได้อย่างไรว่าวันไหนเป็นวันที่ปัจจุบัน ก็เพราะโค้ดการทำปฏิทินของเราจะวิ่งไปเรื่อยๆตั้งแต่วันที่ 1 จนถึงสิ้นเดือนเราก็จะตรวจสอบจากตรงจุดนั้นว่าหากวันที่ที่สร้างปฏิทินวิ่งมาถึงตรงกับวันที่ปัจจุบันแล้วก็ดำเนินการดังกล่าวดังนี้
       เก็บวันที่วิ่งทำปฏิทินไว้รอตรวจสอบ และเริ่มใช้ class = "default"

for($d = $start; ;$d++){
     $class = "default";
     $date = "$year-$month-$d";

       ตรวจสอบว่าตรงกันกับวันที่ปัจจุบันหรือไม่ ถ้าใช่ก็ให้ดำเนินการต่อโดยใช้ class = "today"

if($today == $date){
        $class = "today";
}


       สำหรับวันอื่นๆก็ตรวจสอบดังนี้

ถ้าเป็นวันอาทิตย์ เลือกใช้ class = "sunday"
if($w == 1){
          $class = "sunday";
          echo("<tr align=center class=$class>");

ถ้าเป็นวันเสาร์ เลือกใช้ class = "saturday"
}else if($w == 7){
          $class = "saturday";

ถ้าเป็นวันอื่นๆ เลือกใช้ class = "default"
}else{
          $class = "default";
 }

       ในส่วนของการแสดงผลเป็นช่องว่างเราก็กำหนดให้ทำดังนี้

echo("<td class=$class>&nbsp;</td>");


       และสำหรับการแสดงวันที่ก็กำหนดการแสดงผลไปดังนี้

echo("<td align=center class=$class>$d</td>");



       เท่านี้เราก็จะได้ปฏิทินสวยๆงามๆตามต้องการและหากอยากได้เป็นสีอื่นๆ เรามีให้เลือกมากมาย ลองดูที่เว็บไซต์นี้ครับ ชอบสีไหนก็คัดลอกโค้ดรหัสสีนั้นมาเลย

       เมื่อเราได้ปฏิทินที่มีความสวยงามกันแล้ว ในบทความต่อไปเราจะมาทำปฏิทินที่สามารถเลื่อนไปดูเดือนก่อนหน้า หรือเดือนถัดไปได้กัน แล้วพบกันใหม่นะครับ



PHP : มาสร้างปฏิทินกันเถอะ (ตอนที่ 3)                             สถานะ : กำลังเขียนบทความ ...





1 comment:

  1. อยากให้สอนทำปฎิทินการนัดหมายให้หน่อยค่ะ

    ReplyDelete