#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() (как вы правильно сделали в своем основном вопросе).