我正在一个小规模的网站上工作。它有一个非常简单的想法,有两套用户,办公室和员工,都必须登录访问网站(站点是用Zend框架构建的)。
问题是:我想要一个所有用户都可以访问的日历。办公室工作人员能够编辑日历,员工只能查看日历。
我真的很想用谷歌作为日历的后端,因为它的灵活性:一些上班族在路上工作(他们都有android手机),这样日历就可以与这些用户共享,他们可以使用移动设备来更新日历。
我遇到的问题是和工人们分享日历。我想将可查看的日历嵌入到一个安全的页面中--但是很明显,用户必须以google用户的身份登录才能查看日历(不能公开)。我本来希望我可以使用Zend_Gdata_Calendar,但似乎没有一种简单的方法可以获得日历视图。有办法这样做吗?它是否有可能使该网站使用谷歌,并得到一个嵌入式日历?
另一方面,我希望办公用户能够添加到日历中--通过Zend_Gdata_Calendar非常容易--也许不像我所希望的那么整洁。
我想的另一个选择是可能使用Zend_Gdata_Calendar和jQuery日历,然后允许不同的用户执行不同的任务。
在这种情况下,有什么好的教程可以帮助我们吗?
发布于 2010-11-26 21:55:51
好的,经过大量的搜索,我已经决定实现我自己的解决方案种子,因为我找不到一个符合我的需要。
我决定使用FullCalendar插件。它确实有一个gCal函数,它将从日历提要中获取数据,但是日历需要公开才能使用这个函数。所以我创造了我自己的。
在页面视图(calendar.phtml)上:
<?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; ?>在calendarAction方法中:
$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')); 在我的日历控件中,我添加了一个函数来返回一个json数组(CalendarControler.php):
$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) --它是未完成的,因为我将链接到完全日历的可编辑和添加操作,并使用一些ajax调用来创建一个对话框并添加新事件、编辑事件和删除事件--否则,这将基本上是一个私有的嵌入式谷歌日历(就像向工作人员显示的一样):
$j("#calendar").fullCalendar({
editable: false,
header: {
left: "prev,next today",
center: "title",
right: "month,basicWeek,agendaDay"},
events: "calendar/events"});https://stackoverflow.com/questions/4278208
复制相似问题