2

我正在开发一个小型网站。它有一个非常简单的想法,有两组用户,办公室和工人,都必须登录才能访问该站点(该站点是使用 Zend 框架构建的)

问题:我想要一个所有用户都可以访问的日历。办公室工作人员可以编辑日历,而工人只能查看日历。

由于它的灵活性,我真的很想使用谷歌作为日历的后端:几个办公室工作人员在路上工作(都有安卓手机),所以日历可以与这些用户共享,他们可以使用他们的移动设备更新日历。

我遇到的问题是与工人共享日历。我想将可查看的日历嵌入到安全页面中 - 但显然用户必须以谷歌用户身份登录才能查看日历(它不能公开)。我曾希望我可以使用 Zend_Gdata_Calendar 但似乎没有一种简单的方法来获取日历视图。有没有办法做到这一点?是否可以让网站通过 google 进行身份验证并获得嵌入式日历?

另一方面是我希望办公室用户能够添加到日历中——这通过 Zend_Gdata_Calendar 很容易——可能不像我希望的那样整洁。

我在想的另一个选择是使用 Zend_Gdata_Calendar 和一个jQuery 日历,然后允许不同的用户执行不同的任务。

有没有什么好的教程可以在这种情况下有所帮助?

4

1 回答 1

2

好的,经过大量搜索,我决定实施自己的解决方案,因为我找不到符合我需求的解决方案。

我决定使用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&amp;showCalendars=0&amp;showTz=0&amp;height=600&amp;wkst=2&amp;hl=en_GB&amp;bgcolor=%23FFFFFF&amp;src=YOU-CALENDAR-LINK&amp;color=%2329527A&amp;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) - 它未完成,因为我将连接到可编辑和添加 fullcalendar 的操作,并使用一些 ajax 调用来创建对话框并添加新事件、编辑事件和删除事件 - 否则这会基本上是一个私人嵌入的谷歌日历(就像向工人展示的那样):

    $j("#calendar").fullCalendar({    
        editable: false,            
        header: {
            left: "prev,next today",
            center: "title",
            right: "month,basicWeek,agendaDay"},
        events: "calendar/events"});
于 2010-11-26T21:55:51.643 回答