Saturday, August 18, 2012

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

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



ซึ่งลองเข้าไปอ่านดูกันก่อนนะครับจะได้มีพื้นฐานเบื้องต้นก่อน




       เริ่มกันเลยนะครับ
     ก่อนอื่นเราก็คัดลอกโค้ดนี้ไปวางไว้ที่ Text Editor ทั่วๆไปแล้วบันทึกเป็นไฟล์ .php ชื่ออะไรก็ได้นะครับจากนั้นเราก็มาทำความเข้าใจก่อนว่า ปฏิทินที่เราทำนั้นมีหลักการการทำงานแบบใด ขออธิบายเป็นขั้นตอนคร่าวๆนะครับ เช่นเดิม ผมจะไม่อธิบายโค้ดพื้นฐานในส่วนของ html และ php นะครับ
<html>
<head>
<title>ปฏิทินเบื้องต้น</title>
</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);
$TH_Day = array("อา.","จ.","อ.","พ.","พฤ.","ศ.","ส.");
$TH_Month = array(1 => "มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน",
"กรกฏาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม");
$TH_Year = $year+543;

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

$start = 1 - $first_day;
$w = 1;
for($d = $start; ;$d++){
 if($w == 1){
  echo("<tr>");
 }
 if($d < 1){
  echo("<td>&nbsp;</td>");
 }else if($d >= $num_day){
  if($d == $num_day){
   echo("<td align=center>$d</td>");
  }else{
   echo("<td>&nbsp;</td>");
  }
  if($w == 7){
   echo("</tr>");
   break;
  }
 }else{
  echo("<td align=center>$d</td>");
 }

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

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

  1. แรกเริ่มเลยเราจะต้องเตรียมชื่อวัน ชื่อเดือนและ พ.ศ. แบบไทยๆเสียก่อน เพราะอย่างที่เคยทราบมาแล้วว่าการใช้ฟังก์ชั่น date() ของ php นั้นจะได้ค่าเป็นข้อมูลภาษาอังกฤษในเมื่อเราต้องการทำแบบไทยๆ เราก็ต้องเตรียมภาษาไทยเผื่อเอาไว้สำหรับใช้งานต่อไป ตามตัวอย่างโค้ดดังนี้
  2. $TH_Day = array("อา.","จ.","อ.","พ.","พฤ.","ศ.","ส.");
    $TH_Month = array(1 => "มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน",
    "กรกฏาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม");
    $TH_Year = $year+543;
    โดยในที่นี้ผมเก็บชื่อวันภาษาไทยไว้ที่ อาเรย์ชื่อ $TH_Day เก็บชื่อเดือนไว้ที่อาเรย์ชื่อ $TH_Month และเก็บปีพ.ศ. ที่ตัวแปร $TH_Year
  3. จากนั้นผมก็เริ่มสร้างตารางที่จะทำเป็นปฏิทิน สร้างส่วนหัวปฏิทินโดยใช้ตัวแปร พ.ศ. และเดือนที่เราเก็บไว้มาใช้ และใช้ตัวแปรวันมาสร้างหัวตารางสัปดาห์ตั้งแต่ อา. - ส.
  4. <tr><th>" . implode("</th><th>",$TH_Day) . "</th></tr>
  5. เมื่อสร้างส่วนของหัวตารางต่อไปก็มาดูส่วนของตัวตารางที่จะแสดงวันที่ให้ตรงกับวันในอาทิตย์นั้น สมมติ ผมเริ่มที่เดือนสิงหาคมปี พ.ศ. 2555 ดังนั้นผมจึงเริ่มตรวจสอบก่อนว่าวันที่ 1 สิงหาคม พ.ศ. 2555 นั้นตรงกับวันอะไร โดยการตรวจสอบจากฟังก์ชั่น date()
    ดังตัวอย่าง
  6. $now = strtotime("now");
    $month = date('n',$now);
    $year = date('Y',$now);
    $first = strtotime("$year-$month-1");
    $first_day = date('w',$first);
    เราจะนำค่าจากตัวแปร $first_day มาใช้เทียบว่าวันแรกของเดือนนั้นๆตรงกับวันอะไรในสัปดาห์นั้น สมมติตามตัวอย่าง วันแรกนั้นเป็นวันพุธค่าที่ได้จากตัวแปร $first_day คือ 3
  7. เมื่อเราได้ตำแหน่งวันแรกของเดือนแล้วว่าเป็นวันพุธมีค่า = 3 เราก็มาเริ่มลงวันที่กันเลยโดยเริ่มให้ตัวแปร $start = 1 - $first_day นั่นหมายถึง $start เริ่มต้นจะได้ = -2 เรานำค่านี้มาใช้เพื่อกำหนดให้ช่องหน้าวันที่ 1 ของเดือนมีค่าว่าง คือแสดงเป็นช่องว่างไว้
    $start = 1 - $first_day;
    $w = 1;
    for($d = $start; ;$d++){
     if($w == 1){
      echo("<tr>");
     }
     if($d < 1){
      echo("<td>&nbsp;</td>");
    .
    .
       ส่วนตัวแปร $w นี้จะนำมาควบคุมการจัดวันให้เต็มสัปดาห์โดยเริ่มแรกที่ $w = 1 นั้นหมายถึงเป็นวันแรกของสัปดาห์นั้นใช้สำหรับตรวจสอบว่าเมื่อถึงวันเสาร์แล้ว ($w == 7) จะให้ขึ้นแถวใหม่คือหมดสัปดาห์นั้นแล้วให้เริ่มนับใหม่เป็น $w = 1 เพื่อจัดในแถวต่อไป
  8. if($w == 7){
      echo("</tr>");
      $w = 1;
     }else{
      $w++;
     }
  9. เมื่อเติมช่องว่างหน้าวันแรกของเดือนได้อย่างถูกต้องแล้วเราก็จัดวันที่ 1 ลง และทำตามลำดับวันต่อไป
    }else{
      echo("<td align=center>$d</td>");
     }
    ทั้งนี้ต้องทำการตรวจสอบด้วยว่าเป็นวันสุดท้ายของเดือนด้วยหรือปล่าวเพื่อที่จะได้ทำการใส่วันที่วันสุดท้ายของเดือน
  10. }else if($d >= $num_day){
      if($d == $num_day){
       echo("<td align=center>$d</td>");
  11. หากวันสุดท้ายของเดือนไม่ใช่วันเสาร์คือยังไม่จบอาทิตย์ ก็จะต้องเติมเป็นช่องว่างหลังวันสุดท้ายของเดือน
  12. }else{
       echo("<td>&nbsp;</td>");
    }
  13. สุดท้ายต้องมีการตรวจสอบว่าทำถึงวันสุดท้ายคือวันเสาร์แล้วหรือยัง หากทำถึงวันนี้แล้วให้ทำการจบตารางเป็นอันเสร็จสิ้นการสร้างปฏิทิน
  14. if($w == 7){
       echo("</tr>");
       break;
      }


ผลลัพธ์จากการทำงานด้านบนก็จะได้ปฏิทินตามภาพ


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



PHP : มาสร้างปฏิทินกันเถอะ (ตอนที่ 2)                   ทำบทความนี้เสร็จแล้วก็ คลิกไปดูเลยจ้า






(O_o')

No comments:

Post a Comment