2017-09-03 15 views
8

Używam pełnego kalendarza, kalendarz korzysta z interfejsu Google Calendar API, aby wprowadzić zdarzenia.Pełny kalendarz pokazujący wydarzenia całodniowe

Występuje problem z wyświetlanymi wydarzeniami jako całodzienne dla ich przedziałów czasowych, gdy są wyświetlane w agendaWeek i agendaDay. Zapobiega to poprawnemu wyświetlaniu zdarzeń przez użytkowników i ma trudności z identyfikacją ich dostępności w ciągu dnia lub tygodnia.

Potwierdziłem, że wydarzenia mają czas od 8 rano do 10 rano na przykład.

Jakieś pomysły? Trudny czas na uporządkowanie tego.

$('#calendar').fullCalendar({ 
    theme: true, 
    header: { 
     left: 'prev,next today', 
     center: 'title', 
     right: 'month,agendaWeek,agendaDay' 
    }, 
    buttonIcons: { 
     prev: 'circle-triangle-w', 
     next: 'circle-triangle-e' 
    }, 
    <?php if($jsonEvents !='') { ?> 
    dayClick: function(date, allDay, jsEvent, view) { 
     allday:false; 
     var selectDate = ""; 
     var selectTime = ""; 
     if(view.name !="month") { 
     if(allDay) { 
      selectDate = $.fullCalendar.formatDate(date, 'yyyy-MM-dd'); 
     } 
     else { 
      selectDate = $.fullCalendar.formatDate(date, 'yyyy-MM-dd'); 
      selectTime = $.fullCalendar.formatDate(date, 'hh:mm TT'); 
     } 
     } 
     else { 
     selectDate = $.fullCalendar.formatDate(date, 'yyyy-MM-dd'); 
     } 

     if(selectDate !="") { 
     $("#startDate").val(selectDate); 
     $('#startDate').datepicker('setValue', selectDate); 
     $("#endDate").val(selectDate); 
     $('#endDate').datepicker('setValue', selectDate); 
     } 

     if(selectTime !="") { 
     $("#startTime").val(selectTime); 
     $('#startTime').timepicker({'timeFormat': 'h:i A', 'scrollDefaultNow': true , 'forceRoundTime': true }).on('change', function(ev){ 
      $('#endTime').val(Add30Min($(this).val())); 
      $('#endTime').timepicker({'timeFormat': 'h:i A', 'scrollDefaultNow': true , 'forceRoundTime': true, 'minTime': selectTime}); 
     }); 
     $("#endTime").val(Add30Min(selectTime)); 
     $('#endTime').timepicker({'timeFormat': 'h:i A', 'scrollDefaultNow': true , 'forceRoundTime': true, 'minTime': selectTime}); 
     } 
     $("#eventId").val(""); 
     $("#mainModalHead").text("Add Event"); 
     $("#hidEditEventId").val(""); 
     $("#EventModal").modal(); 
    }, 


    eventClick: function(calEvent, jsEvent, view) { 

     var startDayName = $.fullCalendar.formatDate(calEvent.start, 'ddd'); 
     var startMonthName = $.fullCalendar.formatDate(calEvent.start, 'MMM dd'); 
     var startTime = $.fullCalendar.formatDate(calEvent.start, 'hh:mm TT'); 
     var startDetails = startDayName+", "+startMonthName+", "+startTime; 

     var endDayName = $.fullCalendar.formatDate(calEvent.end, 'ddd'); 
     var endMonthName = $.fullCalendar.formatDate(calEvent.end, 'MMM dd'); 
     var endTime = $.fullCalendar.formatDate(calEvent.end, 'hh:mm TT'); 
     var endDetails = endDayName+", "+endMonthName+", "+endTime; 

     var eventDetails = startDetails+" - "+endDetails; 
     $("#googleEventTitle").text(calEvent.title); 
     $("#googleEventBody").text(eventDetails); 
     $("#eventId").val(calEvent.id); 
     $("#hidEventName").val(calEvent.title); 
     $("#hidStartDate").val($.fullCalendar.formatDate(calEvent.start, 'yyyy-MM-dd')); 
     $("#hidStartTime").val($.fullCalendar.formatDate(calEvent.start, 'hh:mm TT')); 
     $("#hidEndDate").val($.fullCalendar.formatDate(calEvent.end, 'yyyy-MM-dd')); 
     $("#hidEndTime").val($.fullCalendar.formatDate(calEvent.end, 'hh:mm TT')); 
     $("#eventDelete").attr("disabled", false); 
     $("#eventEdit").attr("disabled", false); 
     $("#EditDeleteOperationModal").modal(); 
    }, 

    <?php } ?> 
    weekNumbers : false, 
    weekMode : 'fixed', 
    editable: false, 
    <?php if($jsonEvents !='') { ?> 
     events: <?php echo $jsonEvents; ?>, 
    <?php } ?> 
    timeFormat: 'hh:mm tt', 
    eventColor: '#3c8dbc', 
    eventTextColor: '#ffffff' 
}); 

Oto lista zdarzeń json.

$eventItems = $eventList['items']; //From Google   
$x=0; 
$events = array(); 
$startDateTime =''; 
$endDateTime =''; 
$summary = ''; 
$start = array(); 
$end = array(); 

foreach($eventItems as $item) { 
    if(isset($item['summary'])) { 

     $summary = $item['summary']; 

    } 
    $start = $item['start']; 
    if(isset($start['dateTime'])) { 

     $startDateTime = $start['dateTime']; 

    } 
    else if(isset($start['date'])) { 

     $startDateTime = $start['date']; 

    } 
    $end = $item['end']; 
    if(isset($end['dateTime'])) { 

     $endDateTime = $end['dateTime']; 

    } 
    else if(isset($end['date'])) { 

     $endDateTime = $end['date']; 

    } 

    $events[$x]['id']    = $item['id'];   
    $events[$x]['title']   = $summary; 
    $events[$x]['start']   = $startDateTime; 
    $events[$x]['end']    = $endDateTime; 
    $events[$x]['allDay']   = true; 
    $events[$x]['backgroundColor'] = '#0092D0'; 
    $x++; 
} 
$jsonEvents = json_encode($events);  

}

$jsonEvents zwraca następującą;

string(3742) "[{ 
    "id":"32rsm3h04dsuoikk2r1arfc3m0_20170624T160000Z","title":"Car payment $330.00 28th","start":"2017-06-24T09:00:00-07:00","end":"2017-06-24T10:00:00-07:00","allDay":true,"backgroundColor":"#0092D0"}, 
}]" 

jsonEvents jest zbudowany jak

$eventList = $cal->events->listEvents(
    'primary', 
    array(
     'timeMin' =>''.$pastEvents.'T01:00:00Z', 
     'timeMax' =>''.$futureEvents.'T23:59:59Z', 
     'singleEvents' => true 
    ) 
); 
$eventItems = $eventList['items']; //From Google   
$x=0; 
$events = array(); 
$startDateTime =''; 
$endDateTime =''; 
$summary = ''; 
$start = array(); 
$end = array(); 

foreach($eventItems as $item) { 
    if(isset($item['summary'])) { 

     $summary = $item['summary']; 

    } 
    $start = $item['start']; 
    if(isset($start['dateTime'])) { 

     $startDateTime = $start['dateTime']; 

    } 
    else if(isset($start['date'])) { 

     $startDateTime = $start['date']; 

    } 
    $end = $item['end']; 
    if(isset($end['dateTime'])) { 

     $endDateTime = $end['dateTime']; 

    } 
    else if(isset($end['date'])) { 

     $endDateTime = $end['date']; 

    } 

    $events[$x]['id']    = $item['id'];   
    $events[$x]['title']   = $summary; 
    $events[$x]['start']   = $startDateTime; 
    $events[$x]['end']    = $endDateTime; 
    $events[$x]['allDay']   = true; 
    $events[$x]['backgroundColor'] = '#0092D0'; 
    $x++; 
} 
$jsonEvents = json_encode($events);  

}

+0

Powinieneś opublikować zawartość '$ jsonEvents' ... Chyba nie ma właściwości' start' i 'end'. Zobacz [dokumentacja] (https://fullcalendar.io/docs/event_data/Event_Object/). –

+0

@LouysPatriceBessette Dodałem jsonEvents. – Kray

+0

Tak zmieniasz dane ... I wygląda to poprawnie. Ale chciałem sam sprawdzić zawartość JSON. Wypróbuj 'console.log (" ");', Aby sprawdzić, czy jest godzina rozpoczęcia i zakończenia. Może jest tam, ale nie jest poprawnie sformatowany. Musi to być ISO 8601. –

Odpowiedz

7

znalazłem problem o allDay.

Występuje konflikt między używaniem start/end i allDay.

Z documentation:

Jeśli wszystko inne zawiedzie, FullCalendar spróbuje odgadnąć. Jeśli wartość początkowa lub końcowa ma "T" jako część ciągu daty ISO8601, allDay stanie się fałszywe. W przeciwnym razie będzie to prawda.

Wydaje się, „zmuszając” go true gdy FullCalendar próbuje overide go false jest przyczyną tego problemu.

Być może, które można zgłosić jako błąd ... Ponieważ nie zgłoszono żadnego błędu.
Wystąpił przynajmniej błąd. Proponuję złożyć zgłoszenie błędu i zobaczyć odpowiedź na jego temat. ;)


Ale na razie, twoje pokolenie json wygląda idealnie. Twoim problemem są dane.
Gdy używasz ciągów ISO 8601 jako start/ end, nie ustawiaj całego dnia na true.

LUB ustawić go true, ale tylko zapewnić start datę ... I tylko data, nie ma czasu.
Posiadanie allDay na true sprawia, że ​​end superflous ... nie dostarczaj go.

Tutaj jest CodePen użyłem, aby to naprawić.

+0

mmm ... Od CodePen ?? –

+0

Ustawiłem allday na false, a teraz działa z danych json. – Kray

+0

I rozumiesz dlaczego? Mam na myśli ... Nieumiejętność, w jakim stanie musi być fałszywa? –

Powiązane problemy