2

私は小規模なウェブサイトに取り組んでいます。非常に単純な考え方で、オフィスとワーカーの2セットのユーザーがいて、どちらもサイトにアクセスするためにログインする必要があります(サイトはZendフレームワークで構築されています)

問題:すべてのユーザーがアクセスできるカレンダーが必要です。オフィススタッフはカレンダーを編集でき、ワーカーはカレンダーを表示することしかできません。

柔軟性があるため、カレンダーのバックエンドとしてgoogleを使用したいと思います。2人のサラリーマンが外出先で作業しているため(全員がAndroidスマートフォンを持っています)、カレンダーをそれらのユーザーと共有し、モバイルデバイスを使用してカレンダーを更新します。

私が抱えている問題は、カレンダーを労働者と共有することです。表示可能なカレンダーをセキュリティで保護されたページに埋め込みたかったのですが、カレンダーを表示するには、明らかにユーザーがGoogleユーザーとしてログインする必要があります(公開することはできませんでした)。Zend_Gdata_Calendarを使用できることを望んでいましたが、カレンダービューを取得する簡単な方法はないようです。これを行う方法はありますか?ウェブサイトをグーグルで認証し、埋め込みカレンダーを取得することは可能でしょうか?

反対に、オフィスのユーザーがカレンダーに追加できるようにしたいのですが、これはZend_Gdata_Calendarを使用すれば簡単ですが、思っていたほどきれいではないかもしれません。

私が考えていたもう1つのオプションは、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'));  

Calendar Controlerに、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呼び出しを使用してダイアログを作成し、新しいイベントを追加し、イベントを編集し、イベントを削除するため、未完成です-そうでなければ、これは基本的に、プライベートに埋め込まれたGoogleカレンダー(ワーカーに表示されるものなど)である:

    $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 に答える