Як експортувати подію в Google Calendar або Apple iCal

by | Жов 20, 2023

Події дуже популярний тип постів в WordPress. Отже користувачам часто потрібно експортувати подію до своїх календарів.

Це може бути Apple iCal або Google Calendar. В цьому пості, я опишу рішення для кожного з них.

Як створити посилання до Google Calendar?

Для цього потрібен PHP. 
Наприклад: 

Ми створюємо функцію make_google_calendar_link, яка приймає такі параметри – name, begin, end, location, details.

Name – ім’я події(заголовок).
Begin – дата початку події.
End – дата закінчення події.
Location – місце проведення події.
Details – опис події.

				
					function make_google_calendar_link($name, $begin, $end, $location, $details) {
	$params = array('&dates=', '/', '&location=', '&details=', '&sf=true&output=xml');
	$url = 'https://www.google.com/calendar/render?action=TEMPLATE&text=';
	$arg_list = func_get_args();
	for ($i = 0; $i < count($arg_list); $i++) {
		$current = $arg_list[$i];
		if(is_int($current)) {
			$t = new DateTime('@' . $current, new DateTimeZone('UTC'));
			if($i == 2){
				$current = $t->format('Ymd\THis');
			}else{
				$current = $t->format('Ymd\THis\Z');
			}
			unset($t);
		}
		else {
			$current = urlencode($current);
		}
		$url .= (string) $current . $params[$i];
	}
	return $url;
}
				
			

Якщо ми викличемо функцію. Наприклад:

				
					$linkGoogle = make_google_calendar_link('Event name', strtotime('26 Oct, 10:30 pm'), strtotime('26 Oct, 11:30 pm'), "Khmelnytskyi", 'Test description');
				
			

Ми отримаємо лінк до Google Calendar. 

				
					https://www.google.com/calendar/render?action=TEMPLATE&text=Event+name&dates=20231026T223000Z/20231026T233000&location=Khmelnytskyi&details=Test+description&sf=true&output=xml
				
			

Створимо html і добавимо отриманий лінк до атрибуту “href” тега “<a>”. Наприклад:

				
					<a href="<?php echo $linkGoogle; ?>" target="_blank">Add to Google Calendar</a>
				
			

Якщо ми перейдемо по лінку, ми потрапимо на сторінку форми Google Calendar з вже заповненими нашими данними.

Це працює:)

Як створити експорт до Apple iCal?

Процес експорту події до Apple’s calendar є дещо складніший. Для цього нам потрібно використати сторонню бібліотеку.

Необхідно скачати Zap Calendar iCalendar Library

Використовуючи PHP. 
Наприклад: 

Ми створюємо функцію makeAppleCalendar, яка приймає параметри – namebeginend,  details,  namefile.

Name – ім’я події(заголовок).
Begin – дата початку події.
End – дата закінчення події.
Details – опис події.
Namefile – ім’я файлу в який буде експортовано подію.

				
					function makeAppleCalendar($name, $begin, $end, $details, $namefile){
    require('./icalendar-master/zapcallib.php');//include library
    $icalobj = new ZCiCal();
    $eventobj = new ZCiCalNode("VEVENT", $icalobj->curnode);
    $eventobj->addNode(new ZCiCalDataNode("SUMMARY:" . $name));
    $eventobj->addNode(new ZCiCalDataNode("PRODID:-//WordPress - MECv6.6.5//EN"));
    $eventobj->addNode(new ZCiCalDataNode("DTSTART:" . ZCiCal::fromSqlDateTime($begin) . 'Z'));
    $eventobj->addNode(new ZCiCalDataNode("DTEND:" . ZCiCal::fromSqlDateTime($end) . 'Z'));
    $uid = date('Y-m-d-H-i-s') . "@demo.icalendar.org";
    $eventobj->addNode(new ZCiCalDataNode("DTSTAMP:" . ZCiCal::fromSqlDateTime()));
    $eventobj->addNode(new ZCiCalDataNode("DESCRIPTION:" . $details));
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=$namefile.ics");
    echo $icalobj->export();
}
				
			

Якщо ми викличемо функцію. Наприклад:

				
					makeAppleCalendar("Event name", "2023-11-11 22:30:00", "2023-11-11 23:30:00", "Event description", "calendar");
				
			

Ми отримаємо файл calendar.ics
Коли ми відкриємо файл, то відкриється форма Apple Calendar  з нашими данними.