>

PHP date() 를 통해 캘린더를 생성하고 있습니다  기능에는 name 가있는이벤트테이블도 있습니다.  그리고 date_start , 내가하고 싶은 일은 이벤트가있는 td 요소를 강조 표시하고 기본 형식을 지정하지 않고 그대로 두는 것입니다.

기본적으로 이것은 하루를 반복하는 스크립트입니다.

<?php
     echo "<tr>";
     for ($i = 1; $i < $numDays+1; $i++, $counter++) { 
          $timeStamp = strtotime ("$year-$month-$i");
               if($i == 1){ 
                    $firstDay = date ("w", $timeStamp);
                    for ($j = 0; $j < $firstDay; $j++, $counter++){ 
                         //blank space
                         echo "<td>&nbsp;</td>";
                    }     
                } 
                if($counter % 7 == 0 ){ 
                     echo "<tr></tr>";  
                }
                $todayDate = date("Y-m-d");
                if (date("Y-m-d", $timeStamp) == $todayDate) {
                ?>
                     <td class="today-date"><a href=""><?php echo $i; ?></a></td>
                <?php
                } else {
                ?>
                     <td><a href=""><?php echo $i; ?></a></td>
                <?php
                }
           }
           echo "</tr>";
?>

.today-date  오늘을 강조하는 수업입니다. 이것은 내 테이블 열입니다.

id | name | description | date_start | date_end | time | pastor_id | pastor | category | venue


  • 답변 # 1

    아마도 내 이벤트를 시작 날짜의 키가있는 배열에 넣을 것이므로 다음과 같이 끝납니다.

    $events = [
        '2017-08-22' => [
            'name' => 'Event Title',
        ],
        '2017-08-28' => [
            'name' => 'Event Title',
            'name' => 'Event Title',
        ],
    ];
    
    

    DB에서 여러 가지 방법으로이 작업을 수행 할 수 있습니다. 다음과 같은 것 :

    $events = [];
    while($row = mysql_fetch_assoc($eventQuery))
    {
        $events[$row['start_date']][] = $row['name'];
    }
    
    

    그러면 루프에서 이벤트 날짜를 확인하고 넣을 수 있습니다.

    <td class="<?php echo (array_key_exists(date("Y-m-d", $timeStamp), $events)) ? 'has-event-class' : ''; ?>">
    
    

    캘린더에서 매일 데이터베이스 쿼리를 작성하는 것은 모두 또는 심지어 몇 달을 당기는 것에 비해 매우 비효율적입니다.

    이 함수를 함수로 옮기는 경향이 있으므로 루프에서 오래 걸리지 않습니다.

    function highlightEventTD($timeStamp, $events)
    {
        $date = date("Y-m-d", $timeStamp);
        return (array_key_exists($date, $events)) ? 'has-event-class' : '';
    }
    
    

    그런 다음 forloop에서 :

    <td class="<?php echo highlightEventTD($timeStamp, $events); ?>">
    
    

    또한 이벤트 이름을 표시해야하는 경우 동일한 배열과 함수를 사용할 수 있습니다.

    function getEvents($timestamp, $events)
    {
        $date = date("Y-m-d", $timeStamp);
        return (array_key_exists($date, $events)) ? $events[$date] : null;
    }
    
    

  • 답변 # 2

    먼저 PHP7은 PHP 태그를 여러 번 열고 닫는 것을 더 이상 좋아하지 않습니다 ... echo로 구문을 변경했습니다.

    이걸 해봐 :

    // here make a SQL query (only one query is enough) 
    // on your database, for example :
    $dates = array();
    $q = "SELECT * FROM `events`";
    if($res = $pdo->query($q) {
        if($res = $res->fetchAll(PDO::FETCH_OBJ)) {
            if(sizeof($res) > 0) {
                foreach($res as $k => $d) {
                    $events[$d['date_start']] = $d;
                }
            }
        }
    }
    echo "<tr>";
    for ($i = 1; $i < $numDays + 1; $i++, $counter++) { 
         $timeStamp = strtotime ("$year-$month-$i");
         if($i == 1){ 
              $firstDay = date ("w", $timeStamp);
              for ($j = 0; $j < $firstDay; $j++, $counter++) { 
                  echo "<td>&nbsp;</td>"; //blank space
              }     
         } 
         if($counter % 7 == 0 ) { 
             echo "<tr></tr>";  
         }
         if (date("Y-m-d", $timeStamp) == date("Y-m-d")) {
             $class = "today-date ";
         }
         if (array_key_exists(date("Y-m-d"), $events)) {
             $class .= "event-date ";
         }
         // 1. solution based on your code
         echo "<td class=\"$class\"><a href=\"\">$i</a></td>";
         // 2. alternative with events in each day :
         echo "<td class=\"$class\">";
         if(sizeof($eventsOfTheDay = $events[$d['date_start']]) > 0 {
             foreach($eventsOfTheDay as $k => $event) {
                 echo '<a href=?event_id="', $event['id'], '">', $event['name'], '</a><br>';
             }
         }
         echo "</td>";
    }
    echo "</tr>";
    
    

  • 이전 c# - "다른 프로세스에서 사용중인 파일"IO 예외 피
  • 다음 angular - Angular4 http 요청 public rest api의 cors 오류