ซึ่งลองเข้าไปอ่านดูกันก่อนนะครับจะได้มีพื้นฐานเบื้องต้นก่อน
เริ่มกันเลยนะครับ
ก่อนอื่นเราก็คัดลอกโค้ดนี้ไปวางไว้ที่ 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> </td>"); }else if($d >= $num_day){ if($d == $num_day){ echo("<td align=center>$d</td>"); }else{ echo("<td> </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>
อธิบายหลักการทำงาน
- แรกเริ่มเลยเราจะต้องเตรียมชื่อวัน ชื่อเดือนและ พ.ศ. แบบไทยๆเสียก่อน เพราะอย่างที่เคยทราบมาแล้วว่าการใช้ฟังก์ชั่น date() ของ php นั้นจะได้ค่าเป็นข้อมูลภาษาอังกฤษในเมื่อเราต้องการทำแบบไทยๆ เราก็ต้องเตรียมภาษาไทยเผื่อเอาไว้สำหรับใช้งานต่อไป ตามตัวอย่างโค้ดดังนี้
- จากนั้นผมก็เริ่มสร้างตารางที่จะทำเป็นปฏิทิน สร้างส่วนหัวปฏิทินโดยใช้ตัวแปร พ.ศ. และเดือนที่เราเก็บไว้มาใช้ และใช้ตัวแปรวันมาสร้างหัวตารางสัปดาห์ตั้งแต่ อา. - ส.
- เมื่อสร้างส่วนของหัวตารางต่อไปก็มาดูส่วนของตัวตารางที่จะแสดงวันที่ให้ตรงกับวันในอาทิตย์นั้น สมมติ ผมเริ่มที่เดือนสิงหาคมปี พ.ศ. 2555 ดังนั้นผมจึงเริ่มตรวจสอบก่อนว่าวันที่ 1 สิงหาคม พ.ศ. 2555 นั้นตรงกับวันอะไร โดยการตรวจสอบจากฟังก์ชั่น date()
ดังตัวอย่าง - เมื่อเราได้ตำแหน่งวันแรกของเดือนแล้วว่าเป็นวันพุธมีค่า = 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> </td>"); . .
ส่วนตัวแปร $w นี้จะนำมาควบคุมการจัดวันให้เต็มสัปดาห์โดยเริ่มแรกที่ $w = 1 นั้นหมายถึงเป็นวันแรกของสัปดาห์นั้นใช้สำหรับตรวจสอบว่าเมื่อถึงวันเสาร์แล้ว ($w == 7) จะให้ขึ้นแถวใหม่คือหมดสัปดาห์นั้นแล้วให้เริ่มนับใหม่เป็น $w = 1 เพื่อจัดในแถวต่อไป - เมื่อเติมช่องว่างหน้าวันแรกของเดือนได้อย่างถูกต้องแล้วเราก็จัดวันที่ 1 ลง และทำตามลำดับวันต่อไป
}else{ echo("<td align=center>$d</td>"); }
ทั้งนี้ต้องทำการตรวจสอบด้วยว่าเป็นวันสุดท้ายของเดือนด้วยหรือปล่าวเพื่อที่จะได้ทำการใส่วันที่วันสุดท้ายของเดือน - หากวันสุดท้ายของเดือนไม่ใช่วันเสาร์คือยังไม่จบอาทิตย์ ก็จะต้องเติมเป็นช่องว่างหลังวันสุดท้ายของเดือน
- สุดท้ายต้องมีการตรวจสอบว่าทำถึงวันสุดท้ายคือวันเสาร์แล้วหรือยัง หากทำถึงวันนี้แล้วให้ทำการจบตารางเป็นอันเสร็จสิ้นการสร้างปฏิทิน
$TH_Day = array("อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."); $TH_Month = array(1 => "มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน", "กรกฏาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"); $TH_Year = $year+543;โดยในที่นี้ผมเก็บชื่อวันภาษาไทยไว้ที่ อาเรย์ชื่อ $TH_Day เก็บชื่อเดือนไว้ที่อาเรย์ชื่อ $TH_Month และเก็บปีพ.ศ. ที่ตัวแปร $TH_Year
<tr><th>" . implode("</th><th>",$TH_Day) . "</th></tr>
$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
if($w == 7){ echo("</tr>"); $w = 1; }else{ $w++; }
}else if($d >= $num_day){ if($d == $num_day){ echo("<td align=center>$d</td>");
}else{ echo("<td> </td>"); }
if($w == 7){ echo("</tr>"); break; }
ผลลัพธ์จากการทำงานด้านบนก็จะได้ปฏิทินตามภาพ
คงหายสงสัยกันแล้วนะครับ เบื้องหลังของปฏิทินจากเว็บไซต์ต่างๆที่เราเห็นกัน ก็มีการสร้างปฏิทินก็เป็นแบบนี้เลยครับ เพียงแต่เขาใช้วิธีไหนเท่านั้นเพราะนี่เป็นเพียงวิธีหนึ่งในการทำปฏิทินเท่านั้นนี่เป็นรูปแบบคร่าวๆบางส่วน เราจะเห็นว่าปฏิทินที่เราทำนั้นดูจืดๆไม่สวยงามเอาซะเลย ดังนั้นบทความต่อไปจะเป็นการตกแต่งปฏิทินให้สวยงามน่าดูยิ่งขึ้น โปรดติดตามในบทความต่อไปเลยครับ
PHP : มาสร้างปฏิทินกันเถอะ (ตอนที่ 2) ทำบทความนี้เสร็จแล้วก็ คลิกไปดูเลยจ้า
(O_o')
No comments:
Post a Comment