2011-03-22 2 views
0

MySQL 데이터베이스에서 가져온 데이터로 채울 달력이 있습니다.PHP에서 생성 한 캘린더에서 '일일 일일'셀에 데이터 배치

쿼리 응답은 한 달에 여러 날짜를 나타내는 행 배열입니다. 각 행의 데이터를 날짜에 대응시켜야합니다. 날짜 정보는 MySQL에 'datetime'으로 저장됩니다.

데이터를 개최한다 캘린더 요소

여기에 생성됩니다

for ($day = 1; $day <= $totaldays; $day++) { 
    $day_secs = mktime(0,0,0,$month,$day,$year); 
    if ($day_secs >= $yesterday) { 
     if ($day_highlight && ($day == $this_day)) { 
      print "<td class=\"today\"><span>$day</span><a href=\"CPD_activity_cal_new.php?day=$day&month=$month&year=$year\" class=\"actilink\">Add Activity</a> 
      </td>"; 
     } else { 
      print "<td class=\"monthday\"><span>$day</span><a href=\"CPD_activity_cal_new.php?day=$day&month=$month&year=$year\" class=\"actilink\">Add Activity</a></td>"; 
     } 
    } else { 
     print "<td class=\"monthday\"><span>$day</span><a href=\"CPD_activity_cal_new.php?day=$day&month=$month&year=$year\" class=\"actilink\">Add Activity</a></td>"; 
    } 
    $day_offset++; 

    // start a new row each week // 
    if ($day_offset == 7) { 
     $day_offset = 0; 
     if ($day < $totaldays) { print "</tr>\n<tr>"; } 
    } 
} 

내가 여기 세 가지 주요 두통이 있습니다

  • 나는있는 그대로 로 MYSQL_ASSOC의 출력을 사용할 수 있습니다 - 기타에 단어, 하나의 셀에 배열을 통해 특정 방법으로 을 실행하고 다음에 몇 셀 나중에 올바른 지점에서 루프를 다시 시작하거나 은 각 날짜에 대해 을 별개의 배열로 분할해야합니다 (대부분 월의 대부분의 날짜는 일반적으로 비어 있습니다) - 만약 그렇다면 어떻게됩니까?
  • 코드를 생성하는 날 셀에이 코드 이 속해 있습니까? 오늘, 전 오늘을위한 별도의 루프에 의해이 점에 특히 혼란 스러워요 및 후 오늘 루프의 형태가 가장 좋은 것입니다
  • : 나는 동안()를 가정했습니다,하지만 난 위의 혼란을 감안할 때 놀랍지 않게 그것을 만들 수는 없었습니다 ( ).

이에 대한 조언을 전 해주셔서 감사합니다.

+0

을 귀하의 질문에서 빠진 조각. 그것은 매일 (및 서식 지정) 고유 한 링크로 채워진 달력 테이블을 만들기 위해 루프를 사용하는 것처럼 보이지만 MySQL 데이터가 그림에 들어오는 곳을 잘 모르겠습니다. 또는, 위에서 mysql aspect를 어디에 삽입 할 것인지 묻고 있습니까? –

+0

작은 주석 : 여기서는 약간의 중복을 제거 할 수 있습니다. 'if'를 기반으로 TD에서 변경되는 것은 클래스이기 때문에 첫 번째'if' 전에'$ class = 'today';라고 말할 수 있습니다. 그리고'if '$ class. "\\" "$ class" "\">Add Activity " – glomad

+0

고맙습니다. Robot Woods - 프레임의 프레임을 만들지 않았습니다. 명확한 질문 : 아래 "답변"의 재 작성이 더 명확 해지기를 바랍니다. 물론 감사합니다. 물론 당신 말이 맞습니다. 나는 지금 바로 그런 압력을 받고있다. 나는 지금 그것을 작동시켜야한다 - 나는 그것을 나중에 깨끗이 할 것이다 ... – hnmcc

답변

0

나는 데이터의 모양과 논리가 나를 완전히 이해하기위한 작은 여드름,하지만 나는이 작업을 참조하는 방법이 기본적으로 무엇인지 확실히 모르겠어요하십시오이 같은 느낌

$result = mysql_query("SELECT *, DAY('date') AS day FROM table WHERE ... yadda, yadda"); 

// Reorganize the events into an array keyed by day of the month 
$events = array(); 
while ($row = mysql_fetch_array($result)) { 
    if (!$events[$row['day']]) $events[$row['day']] = array(); 
    $events[$row['day']][] = $row; 
} 

// Build calendar 
for ($day = 1; $day <= $totaldays; $day++) { 
    // logic for outputting standard calendar format 
    if ($events[$day]) { 
     foreach ($events[$day] AS $row) { 
      // output events 
     } 
    } 
} 
+0

고마워, 마이클. 나는 이것으로 먼 길을 갔지만 아직 작동하지 않습니다. – hnmcc

+0

대괄호를 제거하지 않으면 각 배열에 모든 중복 행이 있습니다. 루프가 작동하면 나는 그것으로 살 수있다. 그러나 그것은 그렇지 않다 ... – hnmcc

+0

좋아. 여기서 일어나는 일에 대해 생각해보십시오 : 당신이 통과해야하는 두 가지 목록이 있습니까? 일 목록 (귀하의 일정)과 이벤트 목록이 있습니다. 첫 번째 루프에서 빌드되는 배열은이 두 목록의 행렬을 만듭니다. 즉, 발생하는 날짜까지 이벤트를 그룹화합니다.두 번째 루프는 매일 반복되며 해당 날짜에 이벤트가 있는지 확인합니다. 있을 경우 해당 일의 이벤트를 반복합니다. 어레이가 어떻게 보이는지 더 자세히 이해하려면 'var_dump ($ events)'와 출력을 어딘가에 게시 할 수 있습니까? –

관련 문제