簡體   English   中英

更改日歷以每天顯示多個事件

[英]Change calendar to display multiple events per day

從昨天開始我就在想一個我遇到的問題……

我使用日歷代碼是為了在我的網站上顯示日歷。

這是它的 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 個事件,它就不再起作用,因為數組鍵不再是唯一的(僅顯示 2 個事件中的 1 個)。...

我想要的是一天可以有 1、2、3 甚至 10 個事件......

我想到的只是更改數組生成並在數組鍵處添加H:i:s ,但是,然后根本不再顯示約會......

我如何需要更改日歷生成中的代碼,以便能夠每天添加多個事件? 我嘗試了很多$runningDay$cur_date ,但我似乎無法讓它工作..我不得不承認,雖然我不是最好的多維數組..

任何幫助表示贊賞:)

如果您將時間添加到主要事件索引日歷將無法直接確定給定日期是否有事件。 您可以添加在找到給定日期的事件后使用的二級索引(添加了兩個本地解釋變量$date$time - 在與代碼的其余部分發生沖突的情況下更改它們的名稱):

        $events = array();
        foreach ($partEvents as $event) {
            $date = date('Y-m-d', strtotime($event['eventDate']));
            $time = date('H:i', strtotime($event['eventDate']));
            $events[$date][$time] = array(
                'text' => $event['description'],
                'href' => '/nsl/editGroupCoaching/'.$event['ID'],
                'color' => '#edb01a'
            );
        }

        foreach ($appointments as $event) {
            $date = date('Y-m-d', strtotime($event['eventDate']));
            $time = date('H:i', strtotime($event['eventDate']));
            $events[$date][$time] = array(
                'text' => $event['description'],
                'href' => '#',
                'color' => '#00898d'
            );
        }

現在您需要更改事件的顯示方式(潛在的渲染問題留給您解決 - 它只會直接將單個事件的副本添加到表格單元格中):

        ...
        // Insert an event for this day
        if ($draw_event) {
            ksort($events[$cur_date]);
            foreach ($events[$cur_date] as $time => $event) {
                $calendar .=
                    "<div class='{$css_cal_event}'>" .
                    "<a href='{$event['href']}' style='color:".$event['color'].";'>" .
                    $time.' Uhr: <br/>'.$event['text'] .
                    "</a>" .
                    "</div>";
            }
        }
        ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM