2017-01-15 137 views
0

データベースからのレンダーイベントにfullCalendarを使用する初心者です。私の目的は、私のホテルの詳細を予約したカレンダーを表示することです。カレンダーにはデータのみが表示されます。FullCalendar、jQuery、およびMVCを使用してデータベースからデータを表示

ここに元のスクリプトがあります。データベースからデータを呼び出すために呼び出すイベントをどこに置くべきかわかりません。

<script type="text/javascript"> 

    // DO NOT REMOVE : GLOBAL FUNCTIONS! 

    $(document).ready(function() { 

     "use strict"; 

     var date = new Date(); 
     var d = date.getDate(); 
     var m = date.getMonth(); 
     var y = date.getFullYear(); 

     var hdr = { 
      left: 'title', 
      center: 'month,agendaWeek,agendaDay', 
      right: 'prev,today,next' 
     }; 

     var initDrag = function (e) { 
      // 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(e.children().text()), // use the element's text as the event title 
       description: $.trim(e.children('span').attr('data-description')), 
       icon: $.trim(e.children('span').attr('data-icon')), 
       className: $.trim(e.children('span').attr('class')) // use the element's children as the event class 
      }; 
      // store the Event Object in the DOM element so we can get to it later 
      e.data('eventObject', eventObject); 

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

     var addEvent = function (title, priority, description, icon) { 
      title = title.length === 0 ? "Untitled Event" : title; 
      description = description.length === 0 ? "No Description" : description; 
      icon = icon.length === 0 ? " " : icon; 
      priority = priority.length === 0 ? "label label-default" : priority; 

      var html = $('<li><span class="' + priority + '" data-description="' + description + '" data-icon="' + 
       icon + '">' + title + '</span></li>').prependTo('ul#external-events').hide().fadeIn(); 

      $("#event-container").effect("highlight", 800); 

      initDrag(html); 
     }; 

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

     $('#external-events > li').each(function() { 
      initDrag($(this)); 
     }); 

     $('#add-event').click(function() { 
      var title = $('#title').val(), 
       priority = $('input:radio[name=priority]:checked').val(), 
       description = $('#description').val(), 
       icon = $('input:radio[name=iconselect]:checked').val(); 

      addEvent(title, priority, description, icon); 
     }); 

     /* initialize the calendar 
     -----------------------------------------------------------------*/ 

     $('#calendar').fullCalendar({ 


      header: hdr, 
      buttonText: { 
       prev: '<i class="fa fa-chevron-left"></i>', 
       next: '<i class="fa fa-chevron-right"></i>' 
      }, 

      // defaultView: 'agendaWeek', 
      editable: true, 
      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.allDay = allDay; 

       // 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); 

       // is the "remove after drop" checkbox checked? 
       if ($('#drop-remove').is(':checked')) { 
        // if so, remove the element from the "Draggable Events" list 
        $(this).remove(); 
       } 

      }, 

      select: function (start, end, allDay) { 
       var title = prompt('Event Title:'); 
       if (title) { 
        calendar.fullCalendar('renderEvent', { 
         title: title, 
         start: start, 
         end: end, 
         allDay: allDay 
        }, true // make the event "stick" 
        ); 
       } 
       calendar.fullCalendar('unselect'); 
      }, 

      events: [{ 
       title: 'All Day Event', 
       start: new Date(y, m, 1), 
       description: 'long description', 
       className: ["event", "bg-color-greenLight"], 
       icon: 'fa-check' 
      }, { 
       title: 'Long Event', 
       start: new Date(y, m, d - 5), 
       end: new Date(y, m, d - 2), 
       className: ["event", "bg-color-red"], 
       icon: 'fa-lock' 
      }, { 
       id: 999, 
       title: 'Repeating Event', 
       start: new Date(y, m, d - 3, 16, 0), 
       allDay: false, 
       className: ["event", "bg-color-blue"], 
       icon: 'fa-clock-o' 
      }, { 
       id: 999, 
       title: 'Repeating Event', 
       start: new Date(y, m, d + 4, 16, 0), 
       allDay: false, 
       className: ["event", "bg-color-blue"], 
       icon: 'fa-clock-o' 
      }, { 
       title: 'Meeting', 
       start: new Date(y, m, d, 10, 30), 
       allDay: false, 
       className: ["event", "bg-color-darken"] 
      }, { 
       title: 'Lunch', 
       start: new Date(y, m, d, 12, 0), 
       end: new Date(y, m, d, 14, 0), 
       allDay: false, 
       className: ["event", "bg-color-darken"] 
      }, { 
       title: 'Birthday Party', 
       start: new Date(y, m, d + 1, 19, 0), 
       end: new Date(y, m, d + 1, 22, 30), 
       allDay: false, 
       className: ["event", "bg-color-darken"] 
      }, { 
       title: 'Smartadmin Open Day', 
       start: new Date(y, m, 28), 
       end: new Date(y, m, 29), 
       className: ["event", "bg-color-darken"] 
      }], 

      eventRender: function (event, element, icon) { 
       if (!event.description == "") { 
        element.find('.fc-event-title').append("<br/><span class='ultra-light'>" + event.description + 
         "</span>"); 
       } 
       if (!event.icon == "") { 
        element.find('.fc-event-title').append("<i class='air air-top-right fa " + event.icon + 
         " '></i>"); 
       } 
      }, 

      windowResize: function (event, ui) { 
       $('#calendar').fullCalendar('render'); 
      } 
     }); 

     /* hide default buttons */ 
     $('.fc-header-right, .fc-header-center').hide(); 


     $('#calendar-buttons #btn-prev').click(function() { 
      $('.fc-button-prev').click(); 
      return false; 
     }); 

     $('#calendar-buttons #btn-next').click(function() { 
      $('.fc-button-next').click(); 
      return false; 
     }); 

     $('#calendar-buttons #btn-today').click(function() { 
      $('.fc-button-today').click(); 
      return false; 
     }); 

     $('#mt').click(function() { 
      $('#calendar').fullCalendar('changeView', 'month'); 
     }); 

     $('#ag').click(function() { 
      $('#calendar').fullCalendar('changeView', 'agendaWeek'); 
     }); 

     $('#td').click(function() { 
      $('#calendar').fullCalendar('changeView', 'agendaDay'); 
     }); 

    }) 

</script> 

}

+0

あなたは、fullcalendarのイベントコールバックを使用して、JSON形式のデータベースからイベントをフェッチする場所から自分の場所を追加できます。 –

+0

こんにちは@SauravDangol、あなたはそれを行う方法の例がありますか?私は本当に失われています。どうもありがとう。 –

+0

これは役に立ちますか? https://fullcalendar.io/docs/event_data/events_json_feed/ –

答えて

0

このtutorialが助けてくれました。

基本的には、各イベントのID、開始、終了、タイトルを格納するテーブルが必要です。 次に、テーブルから取得したデータをjsonエンコードし、Ajax経由でカレンダーにフィードする必要があります。

+0

提案のためのおとしさん。 –

+0

テーブルを一度作成してから、必要に応じてテーブルにレコード(イベント)を追加することができます。 –

0

イベントは、$('#calendar').fullCalendar...コードを使用してカレンダーを設定するときに定義されているように、カレンダーのeventsプロパティを使用して静的配列として定義されています。リモートサーバーなどの動的データを取得するには、fullCalendarドキュメントに示すように、2つの主要なオプションがあります。 JSONフィードとして

1)「イベント」:https://fullcalendar.io/docs/event_data/events_json_feed/

このオプションでは、単にfullCalendarが期待する形式でイベントを返し、使用期間によってイベントをフィルタリングすることができ、リソースのURLを指定しますfullCalendarが自動的に送るパラメータ

単にこのようとしてあなたは、フィードを指定することができます。

events: '/myfeed.php' 

それは2つのGETパラメータ、startendに対応し、これらの日付に基づいて返されたリストをフィルタリングすることができるようにする必要があります。上記のドキュメントは、パラメータ値の例を示しています。

必要に応じて利用可能なオプションがいくつかありますが、ドキュメントにもこれらの説明があります。機能として

2)「イベント」:https://fullcalendar.io/docs/event_data/events_function/

基本的にここにあなたがデータを取得するために好き行うことができます - おそらくそれは、AJAX呼び出しを伴うだろうが、関係するいくつかのカスタマイズがあるかもしれない、またはあなたがすることができますイベントをクライアント側で処理してからfullCalendarに戻します。それは本当にあなた次第です。しかし、本質的に、あなたは次のように関数としてイベントを定義します。

events: myGetEventsFunction 

、その後、あなたは上記のドキュメントに指定したパラメータでコールバック関数を提供することができます。

function myGetEventsFunction(start, end, timezone, callback) { 
... 

あなたはstartと意志endが設けられていますカレンダーに現在表示されている日付範囲、必要な場合はタイムゾーン、callbackはイベントをfullCalendarに返すための関数です - もう一度、使用方法の詳細な例については上記文書を参照してくださいそれ。

これらのオプションのいずれかを使用すると、ユーザーがカレンダー表示を変更するか、日付範囲を変更するたびにコードが実行されます。

+0

ハイアディソン、もしあれば2番目のオプションを選択し、mvc C#を使用している場合は、コントローラmyGetEventsFunctionを右コントローラに配置する必要がありますか? $( '#calendar')。fullCalendar?他の設定が必要ですか? –

+0

myGetEventsFunctionはJavaScript関数であるため、コントローラでC#メソッドを呼び出すにはajaxを使用する必要があります。同様に、最初のオプションを使用してC#メソッドはパラメータ指定を受け取りますdを取得し、正しいJSON形式でデータを返します。 2番目のオプションは、他のデータを同時に返す場合や、イベントを返すための既存のサーバーサイドメソッドを持っていても、fullCalendar仕様を満たしていない場合に、柔軟性を提供します。カスタム関数を仲介者として使用してデータを変換します。 – ADyson

関連する問題