[教學] 使用 Google Calendar API - 編輯事件

看板PHP作者 (小惡魔)時間16年前 (2009/03/28 09:56), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
原文程式版: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
文章代碼(AID): #19pOEzDZ (PHP)
文章代碼(AID): #19pOEzDZ (PHP)