Использование массива php в FullCalendar

#javascript #php #fullcalendar

#javascript #php #полный календарь

Вопрос:

Я использовал последнюю версию javascript FullCalendar (https://fullcalendar.io /) на веб-странице WordPress, чтобы иметь возможность отображать назначения wordress для моих пользователей. Пока что Callendar отображается на странице. Теперь я хочу получать встречи из базы данных и отображать их в календаре.

Если я создам массив на php, в котором встречи будут отображаться в виде строки, назначение отобразится в календаре.

Пример:

     $events = $wpdb->get_results("SELECT * FROM wp_projekt_calendar WHERE calendar_author=$uid");

    foreach($events AS $event){
        
        $array['title']= 'rtrt';
        $array['start']= '2020-08-10 10:00:00';
        $array['end']  = '2020-08-10 11:00:00';

   }
echo json_encode($array);
  

Но если я использую результаты запроса, чтобы показать назначение, это не сработает (запрос работает хорошо!):

     foreach($events AS $event){
        
        $array['title']= $event_array->calendar_title;
        $array['start']= $event_array->calendar_startdate .' '.$event_array->calendar_starttime;
        $array['end']  = $event_array->calendar_enddate .' '.$event_array->calendar_endtime;;

   }
    echo json_encode($array);
  

Вот как выглядит мой календарь:

     <script>
    
    document.addEventListener('DOMContentLoaded', function() {
    var initialLocaleCode = 'de';
    var localeSelectorEl = document.getElementById('locale-selector');  
    var calendarEl = document.getElementById('calendar');
        
              var date = new Date();
              var d = date.getDate();
              var m = date.getMonth();
              var y = date.getFullYear();

    var calendar = new FullCalendar.Calendar(calendarEl, {
        
      height: '100%',
      expandRows: true,
      headerToolbar: {
        left: 'prev,next today',
        center: 'title',
        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
      },
      initialView: 'dayGridMonth',    
      locale: initialLocaleCode,
      navLinks: true, // can click day/week names to navigate views
      editable: true,
      selectable: true,
      nowIndicator: true,
      dayMaxEvents: true, // allow "more" link when too many events
      events: {
          url: "https://mydomainxy.com/wp-content/themes/gambit-child/events.php?uid='<?php // $anwender_id ?>'",
          //url: "https://mydomainxy.com/wp-content/themes/gambit-child/php/get-events.php'",
                   type: 'POST',
                   error: function() {
                     alert('There was an error while fetching events.');
                  
                   }
      }
    });

    calendar.render();
  });

</script>
  

Что я делаю не так или как я могу заставить это работать?

Комментарии:

1. В каждом цикле вы перезаписываете $array значение, поэтому оно будет отображать только последнее значение вашего запроса.

2. Нет, проблема не в этом. Json-файлы не являются пустыми. Я их уже проверил. Предоставленные JSON-файлы идентичны. Но первый работает, второй не работает. Вот примеры Json: [ { "title": "test", "start": "2020-08-10T15:00:00-05:00", "end": "2020-08-10T16:00:00-05:00" } ] [ { "title": "test", "start": "2020-08-10T15:00:00-05:00", "end": "2020-08-10T16:00:00-05:00" } ]

3. Другой пример — этот работает: $json2.='[ '; for($i=0;$i<=2;$i ){//foreach($events AS $event_array){ $json2.=' { "title": "test", "start": "2020-08-10T15:00:00-05:00", "end": "2020-08-10T16:00:00-05:00" } '; if($i<2){ $json2.=', '; } } $json2.=' ]'; Но это не работает: $json2.='[ '; for($i=0;$i<=2;$i ){//foreach($events AS $event_array){ $json2.=' { "title": "'. $e[0] .'", "start": "2020-08-10T15:00:00-05:00", "end": "2020-08-10T16:00:00-05:00" } '; if($i<2){ $json2.=', '; } } $json2.=' ]'; оба они создают один и тот же json.

4. Что-то я не понимаю, почему вы объявляете, foreach($events AS $event) если используете $event_array ? Кроме того, вы перезаписываете свое $array значение, как сказал @FelippeDuarte.

5. вы не должны создавать JSON вручную, как те примеры в ваших комментариях. используйте json_encode() (как вы правильно сделали в своем основном вопросе).