Не работает...можешь это в цикл засунуть по месяцам.
За такую фразу тебя побьют, иди почитай правила форума, пункт 1, подпункт 7Автор оригинала: dim-dem
Не работает...
365 запросов, ужас!Автор оригинала: XtremallyPurpur
Вопрос вдогонку,
у меня рисуется календарь на 12 месяцев,
и для каждого дня необходимо подсветить, если информация в базе есть для этого дня.
Итого: 365 запросов к базе при отображении страницы. Как-то оптимизировать можно?
Работает в локальной сети и пользователей не много, но по-моему это неправильный подход.
Что порекомендуете?
function calendar($month_id,$year){
$monthnames = array("Январь",
"Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь");
$monthdays[1]=31;
$monthdays[2]=28;
$monthdays[3]=31;
$monthdays[4]=30;
$monthdays[5]=31;
$monthdays[6]=30;
$monthdays[7]=31;
$monthdays[8]=31;
$monthdays[9]=30;
$monthdays[10]=31;
$monthdays[11]=30;
$monthdays[12]=31;
if ((($year%4==0)&&!($year%100==0))||($year%400==0)) $monthdays[2]++;
$month = ($month_id<10)?"0".$month_id:$month_id;
$calen = "\n\t<font color=black><b>".$monthnames[$month_id-1]."</b></font>\n<table border=1 cellspacing=0 bordercolor=#aaaacc class=tablecl>\n";
$numofweek=0;
for ($i=1;$i<=$monthdays[$month_id];$i++){
$utime = mktime (0,0,0,$month_id,$i,$year);
$getdate_arr = getdate($utime);
$wday = $getdate_arr['wday'];
$month_arr[$wday][$numofweek] = $i;
if($wday==0)$numofweek++;
}
for ($i=1;$i<=6;$i++){
$calen .= "\n\t<tr>\n\t\t<td></td>\n\t\t<td bgcolor=#cccccc>".dayofweek($i)."</td>\n";
for ($k=0;$k<=5;$k++){
if (!isset($month_arr[$i][$k])){
$calen .= "\t\t<td></td>\n";
continue;
}
$day = ($month_arr[$i][$k]<10)?"0".$month_arr[$i][$k]:$month_arr[$i][$k];
$date = $year.$month.$day;
$calen .= "\t\t<td><a href=mail/index.php?search&date=$date&sort=Date&to=down&".r().">$day </a></td>\n";
}
$calen .= "\t</tr>\n";
}
$i=0;
$calen .= "\n\t<tr>\n\t\t<td></td>\n\t\t<td bgcolor=#cccccc>".dayofweek($i)."</td>\n";
for ($k=0;$k<=5;$k++){
if (!isset($month_arr[$i][$k])){
$calen .= "\t\t<td></td>\n";
continue;
}
$day = ($month_arr[$i][$k]<10)?"0".$month_arr[$i][$k]:$month_arr[$i][$k];
$date =$year.$month.$day;
$calen .= "\t\t<td bgcolor=#FFCC99><a href=mail/index.php?search&date=$date&sort=Date&to=down&".r().">$day </a></td>\n";
}
$calen .= "\t</tr>\n";
$calen .= "</table>\n";
return $calen;
}
while(12<$i++){
print calendar($i,2004);
}
$monthdays[1]=31;
$monthdays[2]=28;
$monthdays[3]=31;
$monthdays[4]=30;
$monthdays[5]=31;
$monthdays[6]=30;
$monthdays[7]=31;
$monthdays[8]=31;
$monthdays[9]=30;
$monthdays[10]=31;
$monthdays[11]=30;
$monthdays[12]=31;
$monthnames = array(
function dayofweek($day){
switch ($day){
case 0:
return "Пон";
case 1:
return "Вт";
case 2:
return "Ср";
case 3:
return "Чт";
case 4:
return "Пят";
case 5:
return "Сб";
case 6:
return "Вск";
default:
die("Strange error.");
}
}
<?php
if (!isset($year)) {
$year = date("Y");
}
if (!isset($month)) {
$month = date("m");
}
$calendar = Array();
$day = 1;
$d = 1;
$tsp = mktime("0","0","0",$month,$day,$year);
$inf = getdate($tsp);
if ($inf["wday"] == 0) {$inf["wday"] = 7;}
$x = 1;
$y = 1;
while ($d < $inf["wday"]) {
$calendar[$x][$y] = " ";
$y++;
$d++;
}
while (checkdate($month,$day,$year)) {
$tsp = mktime("0","0","0",$month,$day,$year);
$inf = getdate($tsp);
if ($inf["wday"] == 0) {$inf["wday"] = 7;}
$calendar[$x][$y] = $day;
$y++;
if ($inf["wday"] == 7) {$x++; $y = 1;}
$day++;
}
if ($inf["wday"] < 7) {
for ($inf["wday"]; $inf["wday"] < 7; $inf["wday"]++) {
$calendar[$x][$y] = " ";
$y++;
}
}
?>
<?php
echo "<TABLE border=1 cellspacing=0 cellpadding=3>";
for ($x = 1; $x <= sizeof($calendar); $x++) {
echo "<TR>";
for ($y = 1; $y <= sizeof($calendar[$x]); $y++) {
echo "<TD align=\"right\">".$calendar[$x][$y]."</TD>";
}
echo "</TR>";
}
echo "</TABLE><BR>";
echo "<TABLE border=1 cellspacing=0 cellpadding=3>";
for ($y = 1; $y <= 7; $y++) {
echo "<TR>";
for ($x = 1; $x <= sizeof($calendar); $x++) {
echo "<TD align=\"right\">".$calendar[$x][$y]."</TD>";
}
echo "</TR>";
}
echo "</TABLE>";
?>
<?php
$dates = Array(
'1' => 'Январь',
'2' => 'Февраль',
'3' => 'Март',
'4' => 'Апрель',
'5' => 'Май',
'6' => 'Июнь',
'7' => 'Июль',
'8' => 'Август',
'9' => 'Сентябрь',
'10' => 'Октябрь',
'11' => 'Ноябрь',
'12' => 'Декабрь'
);
$y = "2002";
echo "<FORM name=\"calendar\">";
echo "<SELECT OPTION name=\"month\" OnChange=\"calendar.submit()\">\n";
while (list($k,$v) = each($dates)) {
if ($k == $month) {
echo "<OPTION value=\"".$k."\" selected>".$v."</OPTION>\n";
} else {
echo "<OPTION value=\"".$k."\">".$v."</OPTION>\n";
}
}
echo "</SELECT>\n";
echo "<SELECT OPTION name=\"year\" OnChange=\"calendar.submit()\">\n";
for ($y; $y <= date("Y"); $y++) {
if ($y == $year) {
echo "<OPTION value=\"".$y."\" selected>".$y."</OPTION>\n";
} else {
echo "<OPTION value=\"".$y."\">".$y."</OPTION>\n";
}
}
echo "</SELECT>\n";
echo "</FORM>";
?>