多くの検索の後、自分のニーズに合ったソリューションを見つけることができなかったので、自分のソリューションの見解を実装することに決めました。
私はFullCalendar Pluginを使用することを決めました。カレンダーフィードからデータを取得するgCal関数がありますが、この関数を使用するにはカレンダーを公開する必要があります。だから私は自分自身を作成しました。ページビューで
(calendar.phtml):calendarAction法で
<?php if ($this->worker == "office"): ?>
<div id='calendar'></div>
<?php else: ?>
<iframe src="https://www.google.com/calendar/embed?showTitle=0&showCalendars=0&showTz=0&height=600&wkst=2&hl=en_GB&bgcolor=%23FFFFFF&src=YOU-CALENDAR-LINK&color=%2329527A&ctz=Europe%2FLondon&pvttk=YOUR-PRIVATE-KEY"
style="border-width:0;"
width="580"
height="600"
frameborder="0"
scrolling="no"></iframe>
<?php endif; ?>
:
$this->view->jQuery()->addStyleSheet($this->view->baseUrl('css/JQuery/fullcalendar.css'));
$this->view->jQuery()->addJavascriptFile($this->view->baseUrl('js/fullcalendar.js'));
$this->view->jQuery()->addJavascriptFile($this->view->baseUrl('js/myCal.js'));
私のカレンダーのcontrolerでは、私は(CalendarControler.phpをJSON配列を返すように機能を追加しました):
$startDate = $this->_getParam('start');
$startDate = date("Y-m-d", $startDate);
$endDate = $this->_getParam('end');
$endDate = date("Y-m-d", $endDate);
// Remove the view & layout
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
// Query Google GData for the calendar
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$source = "YOU-APP-NAME";
$user = "USERNAME";
$pass = "PASSWORD";
$client = Zend_Gdata_ClientLogin::getHttpClient($user,$pass,$service,null,$source);
$cal = new Zend_Gdata_Calendar($client);
$events = array();
$query = $cal->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setStartMin($startDate);
$query->setStartMax($endDate);
$eventFeed = $cal->getCalendarEventFeed($query);
// Loop through the returned events:
foreach ($eventFeed as $event)
{
$temp['id'] = $event->id->text;
$temp['title'] = $event->title->text;
$temp['allDay'] = false;
foreach ($event->when as $when)
{
$temp['start'] = date("D M j Y H:i:s eO", strtotime($when->startTime));
$temp['end'] = date("D M j Y H:i:s eO", strtotime($when->endTime));
}
array_push($events, $temp);
}
echo json_encode($events);
最後に未完成のJSクラス(myCal.js) - これは未完了ですl fullcalendarの編集可能なアクションとアクションを追加し、いくつかのajax呼び出しを使ってダイアログを作成し、新しいイベントを追加したり、イベントを編集したり、イベントを削除したりすることができます。そうしないと、基本的には、 :
$j("#calendar").fullCalendar({
editable: false,
header: {
left: "prev,next today",
center: "title",
right: "month,basicWeek,agendaDay"},
events: "calendar/events"});
ありがとうございます。では、カレンダーを公開する必要がありますか、Gdata_ClientLoginはカレンダーにアクセスできるアカウントにログインできるようにしていますか? – jwinn
こんにちはjwinn、あなたは正しいですClientLoginは、ログインするとプライベートカレンダーからエントリを取得することができます。私は誰もが公開URLを見つけた場合、カレンダー公開をする危険にさらされたくありませんでした。 – Scoobler