รูปแบบกิจกรรม event ใน fullcalendar อัพเดทปี 2020 ตอนที่ 3

บทความใหม่ ปีนี้ โดย Ninenik Narkdee
fullcalendar รูปแบบกิจกรรม event

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ fullcalendar รูปแบบกิจกรรม event



เนื้อหานี้เราจะมาดูรูปแบบ event หรือกิจกรรมรูปแบบต่างๆ
ที่ใช้งานใน fullcalendar โดยในสองตอนที่แล้ว เราเริ่มต้นสร้าง
fullcalendar และยังไม่มีกิจกรรมใดๆ มาแสดง ทบทวนที่
    การตั้งค่าปฏิทินกิจกรรม fullcalendar อัพเดทปี 2020 ตอนที่ 2 http://niik.in/975 
 

รูปแบบกิจกรรมใน fullcalendar

    เราจะมาลิสรายการรูปแบบกิจกรรม ที่สามารถกำหนดให้แสดงใน fullcalendar ดังรายการต่อไปนี้
    1. กิจกรรมที่กำหนดวันที่เริ่มต้นอย่างเดียว
    2. กิจกรรมที่กำหนดวันที่เริ่มต้น และวันที่สิ้นสุด
    3. กิจกรรมที่กำหนดวันที่เริ่มต้น และเวลาเริ่มต้น
    4. กิจกรรมที่กำหนดวันที่เริ่มต้น เวลาเริ่มต้น และเวลาสิ้นสุด
    5. กิจกรรมที่กำหนดวันที่เริ่มต้น เวลาเริ่มต้น เวลาสิ้นสุด
    6. กิจกรรมที่กำหนดวันที่เริ่มต้น เวลาเริ่มต้น วันที่สิ้นสุด และเวลาสิ้นสุด
    7. กิจกรรมที่ทำซ้ำ ในวันที่กำหนดในแต่ละสัปดาห์ เช่น ทุกๆ วันจันทร์ หรือทุกๆ วันจันทร์ พุธ และศุกร์
 
    ข้างต้นคือรูปแบบ ที่เราสามารถกำหนดใช้งานใน fullcalendar โดยหลักๆ ข้อมูลสำคัญที่เราจะต้องกำหนด
ก็คือวันที่เริ่มต้น จะต้องมีเสมอ กิจกรรมที่ไม่กำหนดเวลาใดๆ จะเป็นกิจกรรมที่แสดงตลอดทั้งวัน กิจกรรมที่กำหนดเฉพาะ
เวลาเริ่มต้น จะเป็นกิจกรรมที่เริ่มต้นในเวลานั้นที่กำหนด และสิ้นสุดในเที่ยงคืน เช่น กำหนดเวลาเริ่มต้นเป็น 12:00 ช่วงเวลา
จะเป็น 12:00 - 00:00 ดังนั้น หากมีการใช้งานเวลา เป็นไปได้ควรกำหนดเวลาเริ่มต้น และเวลาสิ้นสุด ตัวอย่าง เช่นรูปแบบที่ 4
กำหนดวันที่เป็น 2020-06-01 เวลาเริ่มต้นเป็น 12:00 และเวลาสิ้นสุดเป็น 15:00 ความหมายคือ เป็นกิจกกรมของวันที่ 01-06-2020
เวลา 12:00 - 15:00 น. นั่นเอง
    การกำหนดกิจกรรมแบบทำซ้ำ เป็นตัวช่วยให้เราสร้างรูปแบบกิจกรรมซ้ำๆ โดยไม่ต้องเพิ่มข้อมูลใหม่เข้าไป สมมติเช่น กิจกกรม
วันที 1 - 6 ช่วงเวลา 12:00 - 15:00 เราก็สามารถกำหนด แค่ครั้งเดียว มีวันเริ่มต้น วันสิ้นสุด เวลาเริ่มต้น และเวลาสิ้นสุด ส่วนนี้
จะอธิบายเพิ่มเติมในลำดับต่อไป เช่นเดียวกันกับรูปแบบ การทำซ้ำเฉพาะวันที่ต้องการ เช่น ทำซ้ำเฉพาะวันจันทร์ ในช่วงวันที่ที่กำหนด
    ที่กล่าวไปเป็นการอธิบายให้เห็นภาพคร่าวๆ เท่านั้น ในส่วนรายละเอียด และโค้ดจะอธิบายเพิ่มติมในลำดับต่อไป
 
 

ชนิดข้อมูลที่ใช้ใน fullcalendar

    สำหรับข้อมูลที่ใช้งานใน fullcalendar จะเป็นรูปแบบ JSON String data หรือเรียกสั้นๆ ว่า json เรามาดูรูปแบบข้อมูล
json ของแต่ละรูปแบบกิจกรรม เป็นแนวทางตัวอย่างดังนี้
 

    1. กิจกรรมที่กำหนดวันที่เริ่มต้นอย่างเดียว

        ข้อมูลวันที่เริ่มต้น 2020-06-01
 
[
  {
    "id": "18", /* id เฉพาะของกิจกรรม */
    "groupId": "20200601", /* id กลุ่มข้อมูล */
    "allDay": true, /* กิจกรรมทั้งวัน */
    "start": "2020-06-01", /* วันที่เริ่มต้น */
    "title": "กิจกรรมทดสอบ", /* หัวข้อกิจกรรม */
    "url": "", /* ลิ้งค์ */
    "textColor": "#FFFFFF", /* สีข้อความ */
    "backgroundColor": "#03a9f4", /* สีพื้นหลัง */
    "borderColor": "transparent"  /* สีเส้นขอบ */
  }
]
 

 
 
    รูปแบบ json ข้างต้นเป็นแบบ array ข้อมูล object ของกิจกรรมตัวอย่าง 
    id จะเป็นค่าเฉพาะ ของ กิจกรรมนั้นๆ ไม่่ควรซ้ำกัน ซึ่งโดยทั่วไป เราก็จะใช้เป็น primary key ของข้อมูลอยู่แล้ว
    groupId จะเป็นการจัดกลุ่มข้อมูล ส่วนนี้แล้วแต่เราจะกำหนด ในที่นี้ใช้วันที่เริ่มต้นของกิจกรรมนั้น มีประโยชน์สำหรับ
    กรณีวันนั้นๆ มีกิจกรรม หลายกิจกรรม เราก็สามารถรู้ว่าเป็นกิจกรรมจากกลุ่มวันที่อะไร
    allDay ปกติค่านี้ ถ้าเรากำหนดแค่วันเริ่มต้นอย่างเดียว ค่าเริ่มต้นจะเป็น true อยู่แล้ว นั้นคือกิจกรรมนั้น เป็นกิจกรรมทั้งวัน
    เราจะกำหนดหรือไม่ก็ได้
    start คือวันที่เริ่มต้น 
    ส่วนอื่นๆ ที่เหลือ ก็จะเป็นข้อมูลการปรับแต่งเพิ่มเติม คำอธิบายอยู่ด้านหลัง
 
 

    2. กิจกรรมที่กำหนดวันที่เริ่มต้น และวันที่สิ้นสุด

        ข้อมูลวันที่เริ่มต้น 2020-06-01 และสิ้นสุด 2020-06-03
 
[
  {
    "id": "18",
    "groupId": "20200601",
    "start": "2020-06-01",
    "end": "2020-06-04",
    "title": "กิจกรรมทดสอบ",
    "url": "",
    "textColor": "#FFFFFF",
    "backgroundColor": "#03a9f4",
    "borderColor": "transparent"
  }
]
 
    แบบที่กำหนด "allDay": true ก็ได้ผลลัพธ์เหมือนกัน
 
[
  {
    "id": "18",
    "groupId": "20200601",
    "allDay": true,
    "start": "2020-06-01",
    "end": "2020-06-04",
    "title": "กิจกรรมทดสอบ",
    "url": "",
    "textColor": "#FFFFFF",
    "backgroundColor": "#03a9f4",
    "borderColor": "transparent"
  }
]
 

 
 
    สิ่งที่เพิ่มเข้ามาในรูปแบบที่ 2 คือวันที่สิ้นสุด ( end ) สังเกต จะเห็นว่า วันที่สิ้นสุดของข้อมูลเราจะเป็นวันที่ 3 แต่ข้อมูลที่แสดง
ใน json จะเป็นค่าของวันถัดไป ก็คือวันที่ 4 ทั้งนี้เพราะ ถ้าเรากำหนดเป้น 2020-06-03 จะเป็นวันที่และเวลาสิ้นสุดที่ เท่ากับ
2020-06-03 00:00:00 ตัว fullcalendar จะเอาข้อมูลช่วงวันที่ 2020-06-01 00:00:00 ไปจนถึง 2020-06-03 00:00:00 นั่นหมาย
ความว่า ข้อมูลของวันที่ 3 หลังเที่ยงคืน จะไม่แสดง ข้อมูลจึงไม่ถูกต้อง เราต้องการให้แสดงข้อมูลของวันที่ 3 ดังนั้น ช่วง
วันที่และเวลาสิ้นสุด จะต้องเป็นเที่ยงคืนของวันที่ 4 หรือก็คือ 2020-06-04 00:00:00 ซึ่งเท่ากับ 2020-06-04
 
 

    3. กิจกรรมที่กำหนดวันที่เริ่มต้น และเวลาเริ่มต้น

        ข้อมูลวันที่เริ่มต้น 2020-06-01 เวลาเริ่มต้น 12:00:00
 
[
  {
    "id": "18",
    "groupId": "20200601",
    "start": "2020-06-01T12:00:00",
    "title": "กิจกรรมทดสอบ",
    "url": "",
    "textColor": "#FFFFFF",
    "backgroundColor": "#03a9f4",
    "borderColor": "transparent"
  }
]
 

 
 
    รูปแบบข้อมูลวันที่เริ่มต้น ( start ) ข้างต้นมีเวลาเข้ามาด้วย สังเกตว่ามีตัว T คั่นระหว่างวันที่และเวลา เป็นรูปแบบข้อมูล
วันที่และเวลาอีกรูปแบบหนึ่ง การกำหนดเฉพาะวันที่และเวลา ข้อมูลปฏิทินจะแสดงในช่วง 2020-06-01 12:00:00 ไปจนถึง 
2020-06-01 23:59:59 หรือก็คือหลังจากเวลา 12.00 น. ของวันที่ 1 ทั้งหมด
 
 

    4. กิจกรรมที่กำหนดวันที่เริ่มต้น เวลาเริ่มต้น และเวลาสิ้นสุด

        ข้อมูลวันที่เริ่มต้น 2020-06-01 เวลาเริ่มต้น 12:00:00 เวลาสิ้นสุด 15:00:00
 
[
  {
    "id": "18",
    "groupId": "20200601",
    "start": "2020-06-01T12:00:00",
    "end": "2020-06-01T15:00:00",
    "title": "กิจกรรมทดสอบ",
    "url": "",
    "textColor": "#FFFFFF",
    "backgroundColor": "#03a9f4",
    "borderColor": "transparent"
  }
]
 
 
    รูปแบบแทบจะคล้ายกับรูปแบบที่ 3 แต่เนื่องจากว่ามีเวลาสิ้นสุดเข้ามา ดังนั้น จึงเพิ่มส่วนของ end เป็นวันที่เดียวกัน และ
เวลาสิ้นสุดเข้าไป ข้อมูลก็จะอยู่ในช่วง 2020-06-01 12:00:00 ไปจนถึง 2020-06-01 15:00:00
 
 

    5. กิจกรรมที่กำหนดวันที่เริ่มต้น เวลาเริ่มต้น และวันที่สิ้นสุด

        ข้อมูลวันที่เริ่มต้น 2020-06-01 เวลาเริ่มต้น 12:00:00 วันที่สิ้นสุดเป็น 2020-06-03
 
[
  {
    "id": "18",
    "groupId": "20200601",
    "start": "2020-06-01T12:00:00",
    "end": "2020-06-04",
    "title": "กิจกรรมทดสอบ",
    "url": "",
    "textColor": "#FFFFFF",
    "backgroundColor": "#03a9f4",
    "borderColor": "transparent"
  }
]
 

 
 
    จริงๆ รูปแบบนี้ เราไม่ควรใช้เท่าไหร่ เพราะเวลาสิ้นสุดไม่มี จะทำให้ช่วงข้อมูล เป็นดังนี้
    2020-06-01 12:00:00 ถึง 2020-06-01 23:59:59
    2020-06-02 00:00:00 ถึง 2020-06-02 23:59:59
    2020-06-03 00:00:00 ถึง 2020-06-03 23:59:59
    ควรใช้รูปแบบที่ 6 ถัดไปจะเหมาะสมกว่า
 
 

    6. กิจกรรมที่กำหนดวันที่เริ่มต้น เวลาเริ่มต้น วันที่สิ้นสุด และเวลาสิ้นสุด

        ข้อมูลวันที่เริ่มต้น 2020-06-01 เวลาเริ่มต้น 12:00:00 วันที่สิ้นสุดเป็น 2020-06-03 เวลาสิ้นสุด 15:00:00
 
[
  {
    "id": "18",
    "groupId": "20200601",
    "start": "2020-06-01",
    "end": "2020-06-03",
    "startTime": "12:00:00",
    "endTime": "15:00:00",
    "title": "กิจกรรมทดสอบ",
    "url": "",
    "textColor": "#FFFFFF",
    "backgroundColor": "#03a9f4",
    "borderColor": "transparent",
    "startRecur": "2020-06-01",
    "endRecur": "2020-06-04"
  }
]
 

 
 
    รูปแบบของกิจกรรมนี้ เป็นในลักษณะ เราต้องการให้กิจกรรม เกิดขึ้นในช่วงเวลา 12:00 - 15:00 ของแต่ละวันในช่วงวันที่ 1 ถึง 3
สิ่งที่เพิ่มเข้ามา จะมี startTime , endTime, startRecur และ endRecur  โดยเมื่อใด ก็ตามที่เราจะให้มีกิจกรรมซ้ำๆ จะมีวันที่เริ่มต้น
ของการทำซ้ำ และวันที่สิ้นสุดของการทำซ้ำ นั่นคือ startRecur และ endRecur เพิ่มเข้ามา นั่นคือ ในช่วงวันที่กำหนด ให้ทำซ้ำในช่วง
เวลาที่กำหนดใน startTime และ endTime นั่นเอง
    สังเกต end หรือวันที่สิ้นสุดในกรณีนี้ เป็นวันที่เดียวกับข้อมูลคือวันที่ 3 ในขณะที่ทำไมวันที่ endRecur หรือวันที่สิ้นสุดทำซ้ำ ถึงเป็นวันถัดไป
ทั้งนี้ก็เพราะว่า กิจกรรมมีช่วงเวลาสิ้นสุดเพิ่มเข้ามา และใช้วันที่ endRecur หรือวันที่สิ้นสุดทำซ้ำเป็นช่วงกำหนดแทน
 
 

    7. กิจกรรมที่ทำซ้ำ ในวันที่กำหนดในแต่ละสัปดาห์ เช่น ทุกๆ วันจันทร์ หรือทุกๆ วันจันทร์ พุธ และศุกร์

        ข้อมูลวันที่เริ่มต้น 2020-06-01 เวลาเริ่มต้น 12:00:00 วันที่สิ้นสุดเป็น 2020-06-07 เวลาสิ้นสุด 15:00:00
        โดยทำซ้ำเฉพาะวัน จันทร์ พุธ และพฤหัส 
 
[
  {
    "id": "18",
    "groupId": "20200601",
    "start": "2020-06-01",
    "end": "2020-06-07",
    "startTime": "12:00:00",
    "endTime": "15:00:00",
    "title": "กิจกรรมทดสอบ",
    "url": "",
    "textColor": "#FFFFFF",
    "backgroundColor": "#03a9f4",
    "borderColor": "transparent",
    "daysOfWeek": [
      "1",
      "3",
      "4"
    ],
    "startRecur": "2020-06-01",
    "endRecur": "2020-06-08"
  }
]
 

 
 
    รูปแบบนี้ จะคล้ายกับรูปแบบที่ 6 แต่มีการกำหนดการทำซ้ำในวันที่ต้องการของแต่ละสัปดาห์ ในที่นี้คือวัน จันทร์ พุธ และศุกรร์ ค่าที่เพิ่มเข้ามาคือ
daysOfWeek หรือก็คือค่าวันในสัปดาห์ที่ต้องการกำหนด เริ่มต้นที่ 0 คือวันอาทิตย์ ดังนั้นข้อมูลกิจกรรม ก็จะแสดงเฉพาะวันที่ 1 3 และ 4 ซึ่งตรงกับ
วันจันทร์ พุธ และศุกร์ ในช่วงเวลาวันที่ 1 - 7  แตกต่างจากรูปแบบที่ 6 ที่แสดงทุกวันในช่วงวันที่ 1 - 3 
 
    ให้เราทำความเข้าใจกับรูปแบบข้างต้นไว้ เพราะเนื้อหาต่อไป เราจะกำหนดรูปแบบฐานข้อมูล และการแสดงข้อมูล json จากฐานข้อมูลให้สอดคล้องกับ
รูปแบบกิจกรรมที่เราต้องการตาม โครงสร้าง json 
 
 

การตั้งค่าแสดงข้อมูล event จาก json ไฟล์

    ในที่นี้ เราจะสร้างรูปแบบ json ด้วยคำสั่ง อย่างง่ายโดย php แล้วทำการเรียกใช้งานใน fullcalendar ตามรูปแบบดังนี้
    โดยตัวอย่างข้างต้น เป็นการสร้างโครงสร้าง json สำหรับ fullcalendar เป้นตัวอย่างเท่านั้น ข้อมูลจะแปรผันตามเดือนปัจจุบัน
 

    ไฟล์ events.php

<?php
header("Content-type:application/json; charset=UTF-8");    
header("Cache-Control: no-store, no-cache, must-revalidate");         
header("Cache-Control: post-check=0, pre-check=0", false); 
// โค้ดไฟล์ dbconnect.php ดูได้ที่ http://niik.in/que_2398_5642
// require_once("dbconnect.php");
$json_data = array();

$arr_color_demo = array(
	"1"=>"#ffd149",
	"2"=>"#fa42a2",
	"3"=>"#61c419",
	"4"=>"#ff8e25",
	"5"=>"#44c5ed",
	"6"=>"#ca5ec9",
	"7"=>"#ff0000"
);

$arr_events = array();
$key = null;
for($i=1; $i<=7; $i++){
	$demo_start_date = date("Y-m-01");
	if(is_null($key)){
		$key = 0;
	}else{
		$key++;		
	}
	$json_data[$key] = array(
		"id" => $i,
		"groupId" => date("Ymd",strtotime($demo_start_date)),
		"start" => date("Y-m-d",strtotime($demo_start_date)),
		"title" => "รูปแบบกิจกรรม {$i}",
		"url" => "",
		"textColor" => "#FFFFFF",
		"backgroundColor" => $arr_color_demo[$i],
		"borderColor" => "transparent",		
	);	
	if($i==2){
		$json_data[$key]["end"] = date("Y-m-d",strtotime($demo_start_date." +3 day"));
	}	
	if($i==3){
		$json_data[$key]["start"] = date("Y-m-d\T12:00:00",strtotime($demo_start_date." +4 day"));
	}
	if($i==4){
		$json_data[$key]["start"] = date("Y-m-d\T12:00:00",strtotime($demo_start_date." +6 day"));
		$json_data[$key]["end"] = date("Y-m-d\T15:00:00",strtotime($demo_start_date." +6 day"));
	}	
	if($i==5){
		$json_data[$key]["start"] = date("Y-m-d\T12:00:00",strtotime($demo_start_date." +7 day"));
		$json_data[$key]["end"] = date("Y-m-d",strtotime($demo_start_date." +9 day"));
	}		
	if($i==6){
		$json_data[$key]["start"] = date("Y-m-d",strtotime($demo_start_date." +12 day"));
		$json_data[$key]["end"] = date("Y-m-d",strtotime($demo_start_date." +19 day"));
		$json_data[$key]["startTime"] = "12:00:00";
		$json_data[$key]["endTime"] =  "15:00:00";	
		$json_data[$key]["startRecur"] = date("Y-m-d",strtotime($demo_start_date." +12 day"));
		$json_data[$key]["endRecur"] = date("Y-m-d",strtotime($demo_start_date." +20 day"));		
	}			
	if($i==7){
		$json_data[$key]["start"] = date("Y-m-d",strtotime($demo_start_date." +19 day"));
		$json_data[$key]["end"] = date("Y-m-d",strtotime($demo_start_date." +27 day"));
		$json_data[$key]["startTime"] = "12:00:00";
		$json_data[$key]["endTime"] =  "15:00:00";	
		$json_data[$key]["daysOfWeek"] =  array(1,3,4);	
		$json_data[$key]["startRecur"] = date("Y-m-d",strtotime($demo_start_date." +19 day"));
		$json_data[$key]["endRecur"] = date("Y-m-d",strtotime($demo_start_date." +28 day"));		
	}				
}

// แปลง array เป็นรูปแบบ json string  
if(isset($json_data)){  
    $json= json_encode($json_data);    
    if(isset($_GET['callback']) && $_GET['callback']!=""){    
    echo $_GET['callback']."(".$json.");";        
    }else{    
    echo $json;    
    }    
}
?>
 
    ไฟล์นี้เราจะไว้ที่เดียวกับไฟล์ทดสอบ demo.php ตามเนื้อหาในตอนที่ 1 และ 2 ที่ผ่านมา
    ให้เราทำการเรีรยกใช้งาน event จากไฟล์ events.php ดังนี้
 
 <script type="text/javascript">
  $(function(){
	  // กำหนด element ที่จะแสดงปฏิทิน
	var calendarEl = $("#calendar")[0];

	  // กำหนดการตั้งค่า
	var calendar = new FullCalendar.Calendar(calendarEl, {
		plugins: [ 'interaction','dayGrid', 'timeGrid', 'list' ], // plugin ที่เราจะใช้งาน
		defaultView: 'dayGridMonth', // ค้าเริ่มร้นเมื่อโหลดแสดงปฏิทิน
		header: {
			left: 'prev,next today',
			center: 'title',
			right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
		},	
		events: { // เรียกใช้งาน event จาก json ไฟล์ ที่สร้างด้วย php
			url: 'events.php?gData=1',
			error: function() {

			}
		},    			
		eventLimit: true, // allow "more" link when too many events
		locale: 'th',	 // กำหนดให้แสดงภาษาไทย
		firstDay: 0, // กำหนดวันแรกในปฏิทินเป็นวันอาทิตย์ 0 เป็นวันจันทร์ 1
		showNonCurrentDates: false, // แสดงที่ของเดือนอื่นหรือไม่
		eventTimeFormat: { // รูปแบบการแสดงของเวลา เช่น '14:30' 
			hour: '2-digit',
			minute: '2-digit',
			meridiem: false
		}
	});

	 // แสดงปฏิทิน 
	calendar.render();  

  });
  </script> 
 
 
    ดู demo ผลลัพธ์ด้านล่าง เลือกมุมมองแบบ กำหนดการ จะเห็นรายละเอียด ข่วงเวลาที่ชัดเจน




กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง











เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ