Размещение данных в ячейках «один на день» в сгенерированном PHP календаре - PullRequest
0 голосов
/ 22 марта 2011

У меня есть календарь, который мне нужно заполнить данными, взятыми из базы данных MySQL.

Ответом на запрос будет массив строк, ссылающихся на несколько дат в месяце. Я должен получить данные каждой строки в том, что соответствует ее дате. Информация о дате хранится как «datetime» в MySQL.

Здесь сгенерированы элементы календаря, в которых будут храниться данные:

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_fetch_array как есть - в других слова, я могу бежать определенным образом через массив в одной ячейке, и затем перезапустите цикл на исправить точку через несколько ячеек - или я должен разделить его на отдельные массивы на каждую дату (большинство дат в любом месяц обычно будет пустым) - и если да, то как?
  • где в коде, который генерирует дневные клетки делают мой код для этого принадлежат? Я особенно запутался в этом отношении отдельным петли на сегодня, до сегодняшнего дня, и после сегодня
  • какая форма цикла будет лучшей: Я предполагал, пока (), но я не смог сделать это работа (неудивительно, учитывая путаницу выше!).

Буду очень признателен за любые советы по этому вопросу.

1 Ответ

0 голосов
/ 22 марта 2011

Я не совсем уверен, как выглядят данные, и ваша логика немного неаккуратна для меня, чтобы я полностью понял, но в основном я вижу, как это работает:

$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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...