| | Здравствуйте,
вот код календаря:
<?php
function superpupercalendar(){
$aMonths = array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");
global $DB;
$iH=IntVal(FmtDate($date,"H"));
$iI=IntVal(FmtDate($date,"I"));
$iS=IntVal(FmtDate($date,"S"));
if($iH+$iI+$iS>0)
$dtformat = "FULL";
else
$dtformat = "SHORT";
$aDate = ParseDate(FmtDate($date,"D.M.Y"),"dmy");
if(is_array($aDate) && $aDate[2] > 1971 && $aDate[2] < 2037) //unix 32-bit timestamp
$currDate = mktime($iH, $iI, $iS, $aDate[1], $aDate[0], $aDate[2]);
else
$currDate = time();
$y1 = intval(date("Y", $currDate));
$m1 = intval(date("n", $currDate));
$d1 = intval(date("j", $currDate));
$aInitDate = ParseDate(FmtDate($initdate,"D.M.Y"), "dmy");
if(is_array($aInitDate) && $aInitDate[2] > 1971 && $aInitDate[2] < 2037)
{
$initDate = mktime($iH, $iI, $iS, $aInitDate[1], $aInitDate[0],
$aInitDate[2]);
$init_y = intval(date("Y", $initDate));
$init_m = intval(date("n", $initDate));
$init_d = intval(date("j", $initDate));
}
else
$init_y = $init_m = $init_d = 0;
$today = time();
$today_y = intval(date("Y", $today));
$today_m = intval(date("n", $today));
$today_d = intval(date("j", $today));
$sParam = DeleteParam(array("date"));
if($sParam <> "")
$sParam = "&".$sParam;
?>
<table width="100%" border="0" cellspacing="1" cellpadding="2">
<tr>
<td class="headbg" nowrap align="center"><font class="headtext">
<a class="headtext" title="<?echo GetMessage("calend_prev_mon")?>"
style="text-decoration:none; color:red;" href="<?echo
$sDocPath."?date=".GetTime(mktime($iH, $iI, $iS, $m1-1, 1, $y1),
$dtformat).$sParam?>">«</a>
<a title="<?echo GetMessage("calend_per_mon")?>"
href="calend.php?speriod=<?echo GetTime(mktime($iH, $iI, $iS, $m1, 1,
$y1), $dtformat)?>,<?echo GetTime(mktime($iH, $iI, $iS, $m1+1, 0, $y1),
$dtformat)?>" class="headtext"><?echo $aMonths[$m1-1]?></a>
<a class="headtext" title="<?echo GetMessage("calend_next_mon")?>"
style="text-decoration:none; color:red;" href="<?echo
$sDocPath."?date=".GetTime(mktime($iH, $iI, $iS, $m1+1, 1, $y1),
$dtformat).$sParam?>">»</a>
</font></td>
<td align="center" class="headbg" nowrap><font class="headtext">
<a class="headtext" title="<?echo GetMessage("calend_prev_year")?>"
style="text-decoration:none; color:red;" href="<?echo
$sDocPath."?date=".GetTime(mktime($iH, $iI, $iS, $m1, 1, $y1-1),
$dtformat).$sParam?>">«</a>
<a title="<?echo GetMessage("calend_per_year")?>"
href="calend.php?speriod=<?echo GetTime(mktime($iH, $iI, $iS, 1, 1,
$y1), $dtformat)?>,<?echo GetTime(mktime($iH, $iI, $iS, 1, 0, $y1+1),
$dtformat)?>" class="headtext"><?echo $y1?></a>
<a class="headtext" title="<?echo GetMessage("calend_next_year")?>"
style="text-decoration:none; color:red;" href="<?echo
$sDocPath."?date=".GetTime(mktime($iH, $iI, $iS, $m1, 1, $y1+1),
$dtformat).$sParam?>">»</a>
</font></td>
<td class="headbg" align="center"><a title="<?echo
GetMessage("calend_curr")?>" href="<?echo $sDocPath."?date=".GetTime($today,
$dtformat).$sParam?>" class="headtext" style="text-decoration:none;
color:red;">*</a></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="2" cellpadding="1">
<tr align="center">
<td></td>
<td class="headtext">пн</td>
<td class="headtext">вт</td>
<td class="headtext">ср</td>
<td class="headtext">чт</td>
<td class="headtext">пт</td>
<td class="headtext">сб</td>
<td class="headtext">вс</td>
</tr>
<?
$firstDate = mktime($iH, $iI, $iS, $m1, 1, $y1);
$firstDay = intval(date("w", $firstDate)-1);
if($firstDay == -1)
$firstDay = 6;
$bBreak = false;
for($i=0; $i<6; $i++)
{
$row = $i*7;
if($i > 0 && intval(date("j", mktime($iH, $iI, $iS, $m1,
1-$firstDay+$row, $y1))) == 1)
break;
echo "<tr align=\"center\">\n".
"<td><a title=\"".GetMessage("calend_per_week")."\"
href=\"calend.php?speriod=".GetTime(mktime($iH, $iI, $iS, $m1,
1-$firstDay+$row, $y1), $dtformat).",".GetTime(mktime($iH, $iI, $iS, $m1,
1-$firstDay+$row+6, $y1), $dtformat)."\" class=\"headtext\"
style=\"text-decoration:none\">> </a></td>";
for($j=0; $j<7; $j++)
{
$date = mktime($iH, $iI, $iS, $m1, 1-$firstDay+$row+$j, $y1);
$y = intval(date("Y", $date));
$m = intval(date("n", $date));
$d = intval(date("j", $date));
if($i > 0 && $d == 1)
$bBreak = true;
$sStyle = "";
if($row+$j+1 > $firstDay && !$bBreak)
{
if($d == $today_d && $m == $today_m && $y == $today_y)
$sStyle .= "background-color:#EBEBEB; ";
if($d == $init_d && $m == $init_m && $y == $init_y)
$sStyle .= "border:1px solid #1E5995; ";
}
echo "<td style=\"".$sStyle."\">";
if($row+$j+1 > $firstDay && !$bBreak)
{
echo
"<font class=\"".($j==5 ||
$j==6 ? "holidaytext":"daytext")."\">".
"<a title=\"".GetMessage("calend_date")."\" class=\"".
($j==5 || $j==6? "holidaytext":"daytext")."\"
href=\"calend.php?sdate=".GetTime($date, $dtformat)."\">".$d."</a>".
"</font>";
}
else
echo "<font class=\"daytext\"> </font>";
echo "</td>";
}
echo "</tr>";
if($bBreak)
break;
}
echo "</table>";
}
superpupercalendar();
?>
|
Смысл в том, что посетитель кликает на нужную дату, она передается в параметры урл, а на основе урла следующая функция делает выборку статей.
Это все работает, но при переходе по датам они не подсвечиваются, хотя выбранная дата должна выделяться рамочкой.
Точно так же если кликнуть ссылку месяц назад, то в урл все отображается верно, а на странице остается сегодняшняя дата.
Немного сумбурно, но тестовую версию можно вот тут посмотреть http://www.somus.ru/calend.php - там пока вместо выборки статей просто выводится выбранная дата | |