|
|
|
| Код календаря:
<?php
$daysinmonth=date("t"); //Число дней в месяце
$weeks=$daysinmonth/7; //Число недель в месяце
$weeks=round($weeks,0); //Округляем полученый результат
$dayofweek=date("w"); // День недели 0 - воскресение, 6 - суббота
$dayofmonth=date("j"); // День месяца без нуля
$dayofmonthlz=date("d"); // День месяца с ведущим нулем
$monthlz=date("n"); // Номер месяца без нуля
$monthdays=date("t"); // Колличество дней в месяце
$daysarray=array("Понефторник","Пн","Вт","Ср","Чт","Пт","Сб","Вс");//Массив дней недели
$month = array("1"=>"Январь",
"2"=>"Февраль","3"=>"Март","4"=>"Апрель",
"5"=>"Май", "6"=>"Июнь", "7"=>"Июль",
"8"=>"Август","9"=>"Сентябрь",
"10"=>"Октябрь","11"=>"Ноябрь",
"12"=>"Декабрь");// Массив месяцев
$months=array("мартабрь","января",
"февраля","марта","апреля","мая","июня",
"июля","августа","сентября","октября",
"ноября","декабря");//Массив месяцев
$numberfirstday = date("w",mktime(0,0,0,date("m"),1,date("Y"))); // Вычисляем каким будет первый день месяца по счету в неделе.
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Календарь</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<?
echo "<table width=\"200\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\">\n\t<tr>\n";
// Для начала выводим дни недели
for ($i = 1; $i <= 7; $i++) {
if($i>5){
echo "\t\t<td><font color=\"#E4723A\">".$daysarray[$i]."</font></td>\n";
}else{
echo "\t\t<td>".$daysarray[$i]."</td>\n";
}
}
echo "\t</tr>\n\t<tr>\n";
// Выводим пустые дни предыдущего месяца.
$j = 1;
while ($j < $numberfirstday) {
echo "\t\t<td> </td>\n";
$j++;
}
//Теперь выводим ВСЕ дни месяца.
for ($i = 1; $i <= $monthdays; $i++) {
if($i==$dayofmonth){
# echo "\t\t<td><a href=\"news/".date("Y")."/".date("m")."/".$i."/\"><b>".$i."</b></a></td>\n";
echo "\t\t<td bgcolor=\"#FF8040\" align=\"center\"><b>".$i."</b></td>\n"; // подсвечиваем сегоднящний день
}else{
# echo "\t\t<td><a href=\"news/".date("Y")."/".date("m")."/".$i."/\">".$i."</a></td>\n";
echo "\t\t<td align=\"center\">".$i."</td>\n";
}
//Новая неделя
if (round($j/7)-$j/7==0){
echo "\t</tr>\n\t<tr>\n";
}
$j++;
}
echo "\t</tr>\n</table>\n";
?>
|
Задача: Определенным цветом и bgcolor*ом определять заданые даты. Например 07.08, или 12.12 и т. п. .
Как это сделать ? Шо, и вместо чего заменить/вставить ?... | |
|
|
|
|
|
|
|
для: LINKIN
(27.06.2005 в 17:54)
| | Дополните условия в код подсвечивающий текущую дату
<?php
if($i==$dayofmonth)
?>
|
Например, условие
<?php
if($i == $dayofmonth || $i == 12)
?>
|
будет помимо текущей даты подсвечивать ещё и 12 число. | |
|
|
|
|
|
|
|
для: cheops
(27.06.2005 в 21:07)
| | а подробнее, пожалуйста, как подсветить 08.08 красным цветом ? Кодом, plz. | |
|
|
|
|
|
|
|
для: LINKIN
(27.06.2005 в 22:33)
| | занеси все нужные даты в бд, в файл, в массив...и проверяй если есть эта дата в этом месяце - выделяй | |
|
|
|
|
|
|
|
для: P@Sol
(28.06.2005 в 08:57)
| | ты шо шутишь ?? Какой-то блокнотик в БД ? ;)) | |
|
|
|
|
|
|
|
для: LINKIN
(28.06.2005 в 15:31)
| | мое дело предложить, твое дело воспользоваться советом или нет.... | |
|
|
|
|
|
|
|
для: LINKIN
(27.06.2005 в 22:33)
| | А откуда подсвечиваемые даты брать вы уже решили? Ведь можно подсвечивать праздники. В этом случае, можно хранить их в массиве (как и предложил P@Sol).
Если вам не нравится хранение в массиве, то храните в базе данных.
Или вам нужно подсвечивать какую-то одну дату, но каждый день разную. Тогда эту дату можно через параметр в строке запроса передавать. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(29.06.2005 в 04:51)
| | как на счет:
else if ($monthlz == 8 && $i == 7) // 07.08
echo "\t\t<td align=\"center\"><font color=\"#800000\">".$i."</font></td>\n";
// ....
else{
echo "\t\t<td align=\"center\">".$i."</td>\n";
}
|
вместо:
else{
echo "\t\t<td align=\"center\">".$i."</td>\n";
}
|
.или как-то так:
else if (($monthlz == '8') && ($i == 7))
|
не работает только. | |
|
|
|
|
|
|
|
для: LINKIN
(27.06.2005 в 17:54)
| | вот столкнулся с тойже проблемой...даты храню в файле...вывод календаря:
<?
<table align=center border=0 width=700 cellspacing=1 cellpadding=1 style=\"font-size: $ac_font_size pt; color: $ac_font_color; \">
<tr>
<td colspan=7 style='border:1px #B0B0B0 solid'><div class=zag>$ac_mon $ac_year</div></td> //июль 2005
</tr>
<tr>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Пн</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Вт</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Ср</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Чт</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Пт</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Cб</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Вс</div></td>";
//вывод содержимого
for ($i=0;$i<$ac_now*7;$i++) //$ac_now - кол-во недель
{
if ($i%7==0) {echo "</tr>\n<tr>";}
if ($i%7==5 || $i%7==6) $style="hol";
else if ($i-$ac_1_dow+2 == $ac_j_dom) $style="now"; //$ac_1_dow - первый день недели месяца
//$ac_j_dom - текущий день недели
else $style="all";
echo "<td id='".$style."tb'><div class=d id='".$style."tt'>";
if (($i<$ac_1_dow-1)||($i>$ac_nod+$ac_1_dow-2)) {echo " ";} //$ac_nod -число дней в мес.
else
{
echo $i-$ac_1_dow+2;
if ($i%7!=5 && $i%7!=6)
{
$n+=1;// кол-во раб. дней
if ($i-$ac_1_dow+2 < $ac_j_dom) $b+=1;//$ac_j_dom - день месяца
}
}
echo "</div></td>";
}
echo "
</tr>
</table>
|
Причем праздничные дни надо учесть и при подсчете раб. дней | |
|
|
|
|
|
|
|
для: P@Sol
(26.07.2005 в 10:00)
| | Я бы, наверное, поступил следующим образом:
//создаем массив праздничных дней
$prazdnik[1]=array(1,2,7,13) //праздники для января
...
$prazdnik[12]=array() //праздники для декабря
...
if ($i%7!=5 && $i%7!=6)
{
if (!in_array ($prazdnik[$ac_mon], $i)) $n+=1;// если не прадничный, то кол-во раб. дней +1. Где $i - если я правильно понял, дата.
...
|
| |
|
|
|
|
|
|
|
для: Loki
(26.07.2005 в 10:34)
| | спасибо за идею..вот что получилось
<?
<table align=center border=0 width=700 cellspacing=1 cellpadding=1 style=\"font-size: $ac_font_size pt; color: $ac_font_color; \">
<tr>
<td colspan=7 style='border:1px #B0B0B0 solid'><div class=zag>$ac_mon $ac_year</div></td>
</tr>
<tr>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Ïí</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Âò</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Ñð</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>×ò</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Ïò</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Ñá</div></td>
<td width=100 bgcolor=#DADADA class=head><div class=dn>Âñ</div></td>";
$d = holyday(date("n")); //есть праздники?
//выводим
for ($i=0;$i<$ac_now*7;$i++)
{
if ($i%7==0) {echo "</tr>\n<tr>";}
if ($i%7==5 || $i%7==6) $style="hol";
else if (in_array($i-$ac_1_dow+2,$d)) $style="hol";
else if ($i-$ac_1_dow+2 == $ac_j_dom) $style="now";
else $style="all";
echo "<td id='".$style."tb'><div class=d id='".$style."tt'>";
if (($i<$ac_1_dow-1)||($i>$ac_nod+$ac_1_dow-2)) {echo " ";}
else
{
echo $i-$ac_1_dow+2;
if ($i%7!=5 && $i%7!=6 && !in_array($i-$ac_1_dow+2,$d))
{
$n+=1;
if ($i-$ac_1_dow+2 < $ac_j_dom) $b+=1;
}
}
echo "</div></td>";
}
echo "
</tr>
</table>
|
сама функция:
<?
function holyday($month_c) //есть праздники?
{
settype($month_c,"integer");
$arr = file("date.mpd");
// Â öèêëå ïðîèçâîäèì ðàçáîð êàæäîé ñòðîêè
$l=0;
foreach($arr as $line)
{
// Ðàçáèâàåì ñòðîêó ïî çàïÿòîé
$number = explode(".",$line);
if ($number[1] == $month_c)
{
$d[$l] = $number[0];
$l++;
}
}
return $d;
}
|
| |
|
|
|
|
|
|
|
для: P@Sol
(26.07.2005 в 12:34)
| | есть такая штука...если в выходной праздник, то понедельник выходной...стоит ли создавать отдельную функцию для расчета этих переносов или более рационально дописывать эти даты? | |
|
|
|
|
|
|
|
для: P@Sol
(26.07.2005 в 13:16)
| | Сделал такие изменения:
<?
// Файл с праздниками хранит следующее
// 12.6.a
// 13.6.2005
if ($number[2] == $year_c || $number[2] == "a") //дата с этим годом? или для всех?
{
if ($number[1] == $month_c)
{
$d[$l] = $number[0];
$l++;
}
}
|
| |
|
|
|
|
|
|
|
для: P@Sol
(26.07.2005 в 12:34)
| | если в файле с датами нет даты на текущий месяц, то появляется ошибка
//выводим
for ($i=0;$i<$ac_now*7;$i++)
{
if ($i%7==0) {echo "</tr>\n<tr>";}
if ($i%7==5 || $i%7==6) $style="hol";
else if (in_array($i-$ac_1_dow+2,$d)) $style="hol"; //тут
|
чтобы ее избежать, я сделал следующее:
$d = holyday(date("n")); //есть праздники?
if (!isset($d)) $d=array(32);
|
но это по-моему не очень правильно, хотя работает:) | |
|
|
|
|
|
|
|
для: LINKIN
(27.06.2005 в 17:54)
| | Вот полностью готовый календарь. Суть, навигация базы новостей:
Умеет выделять даты в которые есть новости, умеет выделять текущую дату. Генерит список лет в зависимости от даты первой и последней новости. Ещё умеет выделять в выпадающих менюшках просматриваемый месяц и год.
<?php
$clndrDB = "new";
function get_news_dates($sqlprefix,$clndrDB){
$sql = "SELECT date FROM ".$sqlprefix.$clndrDB;
@$result = mysql_query($sql);
@$numrow = mysql_num_rows($result);
$dateArr[0] = "bug defence"; // difine one array element for in_array() function had no errors
$j = 1;
for ($i=0; $i<$numrow; $i++){
$data = mysql_fetch_array($result);
$date = getdate($data[date]);
if (count($dateArr) == 0 || !in_array($date[mday].".".$date[mon].".".$date[year],$dateArr)){
$dateArr[$j] = $date[mday].".".$date[mon].".".$date[year];
$j++;
}
}
return $dateArr;
}
function generate_calendar($sqlprefix,$date,$p,$mod,$clndrDB){
if (IsSet($date) && !Empty($date)){
$date = explode(".",$date);
$date[day] = $date[0];
$date[month] = $date[1];
$date[year] = $date[2];
}
$today = getdate(time());
if (!IsSet($date['year']) || Empty($date['year'])){
$date['year'] = $today[year];
}
if (!IsSet($date['month']) || Empty($date['month'])){
$date['month'] = $today[mon];
}
if (!IsSet($date['day']) || Empty($date['day'])){
$date['day'] = $today[mday];
}
$timestamp = mktime(0,0,0,$date['month'],1,$date['year']);
$first_day = getdate($timestamp);
$days['start'] = $first_day[wday];
if ($days['start'] == 0){ $days['start'] = 7; }
if ($date['month'] == 2){
if (($date['year'] % 4) == 0){
$days['stop'] = 29;
}
else{
$days['stop'] = 28;
}
}
else{
if (checkdate($date['month'],31,$date['year']) === True){
$days['stop'] = 31;
}
else{
$days['stop'] = 30;
}
}
$j = 1;
$days['temp'] = 1;
$days['index'] = $days['start'];
$dateArr = get_news_dates($sqlprefix,$clndrDB);
while ($days['temp'] <= $days['stop']){
echo ("<tr bgcolor=\"#EAEAEA\">");
while ($j <= 7){
if ($days['temp'] != $date[day]){
if (!in_array($days['temp'].".".$date['month'].".".$date['year'],$dateArr)){
echo ("<td class=\"calendar\">");
}
else{
echo ("<td bgcolor=\"#D9E6E4\" class=\"calendarNews\">");
}
}
else{
if ($days['index'] == $j){
echo ("<td bgcolor=\"#FFFFFF\" class=\"calendarNow\"><strong>");
}
else{
echo ("<td class=\"calendar\">");
}
}
if ($days['index'] == $j && $days['temp'] <= $days['stop']){
if ($days['temp'] != $date[day] && in_array($days['temp'].".".$date['month'].".".$date['year'],$dateArr)){
echo ("<a href=\"index.php?p=".$p."&mod=".$mod."&date=".$days['temp'].".".$date['month'].".".$date['year']."\" class=\"mnu2\">");
}
echo $days['temp'];
if ($days['temp'] != $date[day] && in_array($days['temp'].".".$date['month'].".".$date['year'],$dateArr)){
echo ("</a>");
}
if ($days['temp'] != $date[day]){
echo ("</strong>");
}
$days['temp']++;
$days['index']++;
}
echo ("</td>");
$j++;
}
echo ("</tr>");
$j = 1;
$days['index'] = 1;
}
}
function generate_month_list($date){
if (IsSet($date) && !Empty($date)){
$date = explode(".",$date);
$date[day] = $date[0];
$date[month] = $date[1];
$date[year] = $date[2];
}
$today = getdate(time());
if (!IsSet($date['year']) || Empty($date['year'])){
$date['year'] = $today[year];
}
if (!IsSet($date['month']) || Empty($date['month'])){
$date['month'] = $today[mon];
}
if (!IsSet($date['day']) || Empty($date['day'])){
$date['day'] = $today[mday];
}
$monthArr = array("none","Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Окрябрь","Ноябрь","Декабрь");
for ($i=1; $i<count($monthArr); $i++){
echo ("<option value=\"".$i."\"");
if ($date[month] == $i){
echo (" selected");
}
echo (">".$monthArr[$i]."</option>");
}
}
function actual_years($sqlprefix,$clndrDB,$date){
//get start year
$sql = "SELECT date FROM ".$sqlprefix.$clndrDB." ORDER BY date ASC LIMIT 1";
$result = mysql_query($sql);
$data = mysql_fetch_row($result);
$data[0] = getdate($data[0]);
$yearArr['stop'] = $data[0][year];
$strt_limit = $numrow - 1;
$sql = "SELECT date FROM ".$sqlprefix.$clndrDB." ORDER BY date DESC LIMIT 1";
$result = mysql_query($sql);
$data = mysql_fetch_row($result);
$data[0] = getdate($data[0]);
$yearArr['start'] = $data[0][year];
if (IsSet($date) && !Empty($date)){
$date = explode(".",$date);
$date[day] = $date[0];
$date[month] = $date[1];
$date[year] = $date[2];
}
$today = getdate(time());
if (!IsSet($date['year']) || Empty($date['year'])){
$date['year'] = $today[year];
}
if (!IsSet($date['month']) || Empty($date['month'])){
$date['month'] = $today[mon];
}
if (!IsSet($date['day']) || Empty($date['day'])){
$date['day'] = $today[mday];
}
for ($yearArr['start']; $yearArr['start']>=$yearArr['stop']; $yearArr['start']--){
echo ("<option value=\"".$yearArr['start']."\"");
if ($yearArr['start'] == $date[year]){
echo (" selected");
}
echo (">".$yearArr['start']."</option>");
}
}
?>
<form name="clndr" method="post" action="index.php?p=<? echo $p; ?>&mod=<? echo $mod; ?>">
<script>
function select_date() {
document.clndr.date.value='1.'+document.clndr.m.value+'.'+document.clndr.y.value;
document.clndr.submit();
}
</script>
<table width="100%" border="0" cellpadding="1" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#FFFFFF">
<tr bgcolor="#CCCCCC">
<td height="31" colspan="7" align="center" background="image/calendar/top.gif" class="calendarTop">
<input type="hidden" name="date">
<select name="m" class="calendar">
<? generate_month_list($date); ?>
</select>
<select name="y" class="calendar">
<? actual_years($sqlprefix,$clndrDB,$date); ?>
</select>
<img src="image/calendar/go.gif" alt="перейти" width="65" height="20" hspace="2" border="0" align="absmiddle" onClick="select_date();">
</td>
</tr>
<!-- DAYS ACRONIMS -->
<tr bgcolor="#E0E0D1">
<td class="calendar">Пн</td>
<td class="calendar">Вт</td>
<td class="calendar">Ср</td>
<td class="calendar">Чт</td>
<td class="calendar">Пт</td>
<td class="calendar">Сб</td>
<td class="calendarHoly"><strong>Вс</strong></td>
</tr>
<!-- DAYS ACRONIMS END -->
<? generate_calendar($sqlprefix,$date,$p,$mod,$clndrDB); ?>
</table>
</td>
</tr>
</table>
</form>
// на написание ушло 20 минут, на отладку 2 часа
|
| |
|
|
|
|