Вот динамически собранный календарик. Даты можно сделать ссылками со следующими GET параметрами [mono]?year=2010&month=5&day=9[/mono]
Дальше надо только принять эти параметры и выбрать по ним данные из БД.
<?php
define('YEAR', 2010); // Год.
function calendar() {
$tr = true;
print '<table width="100%"><tbody>';
for ($i = 1; $i <= 12; $i++) {
if ($tr) print '<tr>';
print '<td valign="top" align="center">';
month($i);
print '</td>';
if (!$tr) print '</tr>';
$tr = ($tr) ? false : true;
}
if (!$tr) print '<td></td></tr>';
print '</tbody></table>';
}
function L_month($month) {
$td = 1;
$date_now = getdate();
$month_name = array(
1 => 'Январь',
2 => 'Февраль',
3 => 'Март',
4 => 'Апрель',
5 => 'Май',
6 => 'Июнь',
7 => 'Июль',
8 => 'Август',
9 => 'Сентябрь',
10 => 'Октябрь',
11 => 'Ноябрь',
12 => 'Декабрь'
);
print '<table><tbody>'
. '<tr><td colspan="7" align="center">' . $month_name[$month] . '</td></tr>';
for ($i = 1; $i <= 31; $i++) {
if (!checkdate($month, $i, YEAR)) break;
$month_dat = date('N', strtotime(YEAR . '-' . $month . '-' . $i));
if ($td == 1) {
$td = $month_dat;
if ($i == 1) {
print '<tr><td colspan="' . ($td - 1) . '"></td><td>';
} else {
print '<tr><td>';
}
} else {
print '<td>';
}
print '<div>' . $i . '</div>';
print '</td>';
$td++;
if ($td > 7) {
print '</tr>';
$td = 1;
}
}
if ($td > 1) print '<td colspan="' . (7 - $td + 1) . '"></td></tr>';
print '</tbody></table>';
}
?>