со вчерашнего дня я думаю о проблеме, которая у меня есть ...
Я использую этот календарный код для отображения календаря на моем веб-сайте.
Вот код PHP для него: (Я немного изменил его, чтобы представлять цвета и время в календаре)
// CSS classes
$css_cal = 'calendar';
$css_cal_row = 'calendar-row';
$css_cal_day_head = 'calendar-day-head';
$css_cal_day = 'calendar-day';
$css_cal_day_number = 'day-number';
$css_cal_day_blank = 'calendar-day-np';
$css_cal_day_event = 'calendar-day-event';
$css_cal_event = 'calendar-event';
// Table headings
$headings = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'];
// Start: draw table
$calendar =
"<table cellpadding='0' cellspacing='0' class='{$css_cal}'>" .
"<tr class='{$css_cal_row}'>" .
"<td class='{$css_cal_day_head}'>" .
implode("</td><td class='{$css_cal_day_head}'>", $headings) .
"</td>" .
"</tr>";
// Days and weeks
$running_day = date('N', mktime(0, 0, 0, $month, 1, $year));
$days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
// Row for week one
$calendar .= "<tr class='{$css_cal_row}'>";
// Print "blank" days until the first of the current week
for ($x = 1; $x < $running_day; $x++) {
$calendar .= "<td class='{$css_cal_day_blank}'> </td>";
}
// Keep going with days...
for ($day = 1; $day <= $days_in_month; $day++) {
// Check if there is an event today
$cur_date = date('Y-m-d', mktime(0, 0, 0, $month, $day, $year));
$draw_event = false;
if (isset($events) && isset($events[$cur_date])) {
$draw_event = true;
}
// Day cell
$calendar .= $draw_event ?
"<td class='{$css_cal_day} {$css_cal_day_event}'>" :
"<td class='{$css_cal_day}'>";
// Add the day number
$calendar .= "<div class='{$css_cal_day_number}'>" . $day . "</div>";
// Insert an event for this day
if ($draw_event) {
$calendar .=
"<div class='{$css_cal_event}'>" .
"<a href='{$events[$cur_date]['href']}' style='color:".$events[$cur_date]['color'].";'>" .
$events[$cur_date]['time'].' Uhr: <br/>'.$events[$cur_date]['text'] .
"</a>" .
"</div>";
}
// Close day cell
$calendar .= "</td>";
// New row
if ($running_day == 7) {
$calendar .= "</tr>";
if (($day + 1) <= $days_in_month) {
$calendar .= "<tr class='{$css_cal_row}'>";
}
$running_day = 1;
}
// Increment the running day
else {
$running_day++;
}
} // for $day
// Finish the rest of the days in the week
if ($running_day != 1) {
for ($x = $running_day; $x <= 7; $x++) {
$calendar .= "<td class='{$css_cal_day_blank}'> </td>";
}
}
// Final row
$calendar .= "</tr>";
// End the table
$calendar .= '</table>';
// All done, return result
return $calendar;
}
Теперь у меня есть два разных типа встреч, которые я получаю от своего дБ, преобразовать в массив и передать его как переменную $events
:
$events = array();
foreach ($partEvents as $event) {
$events[date('Y-m-d', strtotime($event['eventDate']))] = array(
'text' => $event['description'],
'href' => '/nsl/editGroupCoaching/'.$event['ID'],
'time' => date('H:i', strtotime($event['eventDate'])),
'color' => '#edb01a'
);
}
foreach ($appointments as $event) {
$events[date('Y-m-d', strtotime($event['date']))] = array(
'text' => $event['description'],
'href' => '#',
'time' => date('H:i', strtotime($event['date'])),
'color' => '#00898d'
);
}
Поэтому я отображаю $partEvents
в одном цвете и $appointments
в другом цвете. В целом, это работает нормально, и они отображаются со временем перед ними. Однако всякий раз, когда в один день происходит 2 события, он больше не работает, поскольку ключ массива больше не является уникальным (отображается только 1 из 2 событий) ....
Что Я хотел бы иметь в виду, что в один день может быть 1,2,3 или даже 10 событий ...
Я подумал только о том, чтобы просто изменить генерацию массива и добавить H:i:s
в ключах массива. однако, тогда больше не отображаются встречи ...
Как мне нужно изменить код из генерации календаря, чтобы иметь возможность добавлять несколько событий в день? Я много пытался поиграться с $runningDay
и $cur_date
, но, похоже, я не могу заставить его работать ... Должен признать, что я не самый лучший с многомерными массивами, хотя ..
Любая помощь приветствуется:)