[教學] 使用 Google Calendar API - 編輯事件
原文程式版:http://blog.wu-boy.com/2009/03/28/1096/
上一篇介紹了瀏覽 Google Calendar API 範圍內所有的事件,有沒有發現在 index.php
就有瀏覽單一事件的連結,我們透過 API 可以取得單一事件的 evenID,取得的方式就是
透過 basename 函式:
basename($event->id->text)
我們可以利用 $_GET 方式讀取到 evenID 值,傳送到 event.php 來接收
$eventId = ( isset($_POST['id']) ) ? $_POST['id'] : $_GET['id'];
1. 新增 event.php 檔案,寫入開頭:
<?
include('config.inc.php');
/*
* 首頁傳來的 event id 值
*/
$eventId = ( isset($_POST['id']) ) ? $_POST['id'] : $_GET['id'];
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($googleAccount, $googlePassword, $service);
/*
* 讀取單一事件資料
*/
$eventEntry = getEvent($client, $eventId);
/*
* 讀取單一事件地點
*/
foreach ($eventEntry->where as $where) {
$whereValue = $where->valueString;//地點
}
?>
讀取單一事件可寫成一個 getEvent function 到 config.inc.php 檔案,只要傳入
even ID 直進去就可以了。
function getEvent($client, $eventId)
{
$gdataCal = new Zend_Gdata_Calendar($client);
$query = $gdataCal->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');
$query->setEvent($eventId);
try {
$eventEntry = $gdataCal->getCalendarEventEntry($query);
return $eventEntry;
} catch (Zend_Gdata_App_Exception $e) {
var_dump($e);
return null;
}
}
2. 編輯事件表格:
<form action="edit.php" method="post" name="GClab" id="GClab">
標題:<input name="title" type="text" id="title" size="20" value="<?=$eventEntry->title->text;?>"><br />
地點:<input name="where" type="text" id="title" size="20" value="<?=$whereValue;?>"><br />
內容:<textarea name="content" cols="60" rows="5" id="content" /><?=$eventEntry->content->text;?></textarea><br />
<input type="submit" name="Submit" value="修改資料"><input name="id" type="hidden" id="" value="<?=basename($eventEntry->id->text)?>" size="6">
</form>
必須將 event id 寫入 hidden 裡面,傳送到 edit.php
3. 顯示單一事件:
<?php
echo "<h2>" . $eventEntry->title->text . "</h2>\n";
echo "<ul>\n";
echo "\t<li><b>內容:</b>".nl2br($eventEntry->content->text)."</li>\n";
foreach ($eventEntry->where as $where)
{
echo "\t<li><b>地點:</b>" . $where->valueString . "</li>\n";//地點
}
foreach ($eventEntry->when as $when)
{
echo "\t<li><b>開始時間:</b>" . $when->startTime . "</li>\n";
echo "\t<li><b>結束時間:</b>" . $when->endTime . "</li>\n";
}
echo "\t<li><b>事件ID:</b>".basename($eventEntry->id->text)."</li>\n";
echo "</ul>\n";
?>
當我們編輯好,送出到 edit.php 頁面,就可以利用 updateEvent function 來達到更新
資料,官網上面只有更新 title,我加入了地點跟 content 內容更新,這樣會比較實用
,程式碼如下:
function updateEvent ($client, $eventId, $newTitle, $where, $desc)
{
$gdataCal = new Zend_Gdata_Calendar($client);
if ($eventOld = getEvent($client, $eventId)) {
echo "Old title: " . $eventOld->title->text . "<br />";
$eventOld->title = $gdataCal->newTitle($newTitle);
$eventOld->where = array($gdataCal->newWhere($where));
$eventOld->content = $gdataCal->newContent($desc);
try {
$eventOld->save();
} catch (Zend_Gdata_App_Exception $e) {
var_dump($e);
return null;
}
$eventNew = getEvent($client, $eventId);
echo "New title: " . $eventNew->title->text . "<br />";
return $eventNew;
} else {
return null;
}
}
完整的 event.php 跟 edit.php 就麻煩到底下網址觀看:
http://blog.wu-boy.com/2009/03/28/1096/
程式碼有點多,那就不貼到這邊了
--
Appleboy Blog: http://blog.Wu-Boy.com 電腦技術、美食介紹、旅遊資訊
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.69.81.52
PHP 近期熱門文章
PTT數位生活區 即時熱門文章