1

スケジューラーが組織のメンバーを Fullcalendar にドラッグ アンド ドロップできるスケジューリング カレンダーを作成しています。ドロップされたイベントを配列オブジェクト、arrayOfEvents に格納するところまで来ました。Ajax を CakePHP の add 関数に送信して、イベント データベースにデータを挿入し、カレンダーをリロードしたいと考えています。これが私のコードです。

ドロップする外部イベント:

/* initialize the external events
     -----------------------------------------------------------------*/

    $('#external-events div.external-event').each(function() {

        // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)
        // it doesn't need to have a start or end
        var eventObject = {
            title: $.trim($(this).text()), // use the element's text as the event title
            userId: this.id
        };

        // store the Event Object in the DOM element so we can get to it later
        $(this).data('eventObject', eventObject);

        // make the event draggable using jQuery UI
        $(this).draggable({
            zIndex: 999,
            revert: true, // will cause the event to go back to its
            revertDuration: 0  //  original position after the drag
        });

    });

フルカレンダー:

     /* initialize the calendar
     -----------------------------------------------------------------*/
    var arrayOfEvents = [];
    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'agendaWeek,agendaDay'
        },
        defaultView: 'agendaWeek',
        editable: true,
        events: [
<?php foreach ($users as $user) {
foreach ($user['Event'] as $event):
    ?>
                    {
                        start: '<?php echo $event['start_date']; ?>',
                        end: '<?php echo $event['end_date']; ?>',
                        title: '<?php echo $event['title']; ?>',
                        allDay: false,
                        color: '#077169'
                    },
<?php endforeach;
}
?>
        ],
        droppable: true, // this allows things to be dropped onto the calendar !!!
        drop: function(date, allDay) { // this function is called when something is dropped

            // retrieve the dropped element's stored Event Object
            var originalEventObject = $(this).data('eventObject');
            // we need to copy it, so that multiple events don't have a reference to the same object
            var copiedEventObject = $.extend({}, originalEventObject);
            // assign it the date that was reported
            copiedEventObject.start = date;
            copiedEventObject.end = (date.getTime() + 3600000) / 1000; // default shift length is 1 hour
            copiedEventObject.userId = originalEventObject.userId;
            copiedEventObject.allDay = false;
            // render the event on the calendar
            // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
            $('#calendar').fullCalendar('renderEvent', copiedEventObject, true);
            // Push events into array
            arrayOfEvents.push(copiedEventObject);
            //todo: the calendar needs to insert events into the event calendar. 
            console.log(arrayOfEvents);
        }
    });



});

リンク上で呼び出される Update Schedule 関数:

function updateSchedule()
 {
     var arrayOfEvents = [];
    //var data = "numOfEvents=" + arrayOfEvents.length; //original
    var data = "numOfEvents=" + arrayOfEvents.length;


    // You can get all events out of the array here
    for (var i = 0; i < arrayOfEvents.length; i++) {
        var event = arrayOfEvents[i];
        data += "&id" + i + "=" + event.id
                + "&start" + i + "=" + event.start
                + "&end" + i + "=" + event.end;
    }

    // Make your ajax post here
    $.ajax({
        type: "POST",
        url: "<?php echo $this->webroot; ?>events/add",
        data: data,
        success: function(response) {
            alert('done!');
        },
        fail: function(response) {
            alert("error");
        }

    });

Cakephp イベント/追加機能:

public function add() {
    $this->autoRender = false;
    if ($this->RequestHandler->isAjax()) {
        Configure::write('debug', 0);
    }
    if (!empty($this->data)) {

        if ($this->Event->save($this->data)) {
            echo 'Record has been added';
        } else {
            echo 'Error while adding record';
        }
    }
}

これが長いものであることは承知していますが、どんな意見も歓迎されます。

4

0 に答える 0