[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите пожалуйста разобраться со скриптом
Гость_Алексей
Имеется скрипт календаря, найденый на просторах интернета =) Долго и скурпулезно разбирался в его алгоритме. Переделал под свои нужды, но вылез неприятный баг. Если месяц заканчивается на субботе, то следующий месяц начинается с понедельника, а не с воскресенья, и "лишнее число" вылезает за рамки таблицы.

<?php
//*****************Календарь***************************

//Генерация страницы ошибки при доступе вне системы

if(!defined('MVC_KEY')) {
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('../404.html'));
}

class calendar {
public static function draw_calendar() {

if(isset($_GET['ym'])) {
$year = (int)substr($_GET["ym"], 0, 4);
$month = (int)substr($_GET["ym"], 4, 2);
} else {
$month = date("m", mktime(0,0,0,date('m'),1,date('Y')));
$year = date("Y", mktime(0,0,0,date('m'),1,date('Y')));
}

$replace_values = array ('January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
);
$replace_keys = array ('Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь'
);

/* Начало таблицы */
$calendar = '<table cellpadding="0" cellspacing="0" class="calendar">';
/* Заглавия в таблице */
$calendar .=
'<thead>
<tr>
<th colspan="1" class="heading">
<a href="?ym='
.date("Ym", mktime(0,0,0,$month-1,1,$year)).'">««</a>
</th>
<th colspan="5" class="heading">'

.str_replace($replace_values, $replace_keys, date("F, Y", mktime(0,0,0,$month,1,$year))).
'</th>
<th colspan="1" class="heading">
<a href="?ym='
.date("Ym", mktime(0,0,0,$month+1,1,$year)).'">»»</a>
</th>
</tr>
</thead>'
;

$headings = array('Пн',
'Вт',
'Ср',
'Чт',
'Пт',
'Суб',
'Вс');

$calendar.=
'<tr class="calendar-row">
<td class="calendar-day-head">'

.implode('</td><td class="calendar-day-head">',$headings).
'</td>
</tr>'
;

/* необходимые переменные дней и недель... */
$running_day = date('w',mktime(0,0,0,$month,1,$year));
$running_day = $running_day - 1;
$days_in_month = date('t',mktime(0,0,0,$month,1,$year));
$days_in_this_week = 1;
$day_counter = 0;

/* первая строка календаря */
$calendar.= '<tr class="calendar-row">';
/* вывод пустых ячеек в сетке календаря */
for($x = 0; $x < $running_day; $x++) {
$calendar.= '<td class="calendar-day-np"></td>';
$days_in_this_week++;
}
/*Делаем запрос в базу данных*/
if(isset($_GET['ym'])) {
$yearsearch = (int)substr($_GET["ym"], 0, 4);
$monthsearch = (int)substr($_GET["ym"], 4, 2);
} else {
$monthsearch = date("m", mktime(0,0,0,date('m'),1,date('Y')));
$yearsearch = date("Y", mktime(0,0,0,date('m'),1,date('Y')));
}

$res = mysqlQuery("SELECT *
FROM `events`
WHERE `year` = '"
.$yearsearch."'
AND `month` = '"
. $monthsearch ."'
"
);
while($row = mysql_fetch_assoc($res)) {
$event[] = $row;
}

/* дошли до чисел, будем их писать в первую строку */
if(mysql_num_rows($res) > 0) {
for($list_day = 0; $list_day <= $days_in_month-1; $list_day++){
if(@$event[$list_day]['eventtitle'] != ''){
$calendar .= '<td class="calendar-day-event">';
$calendar .= '<a href="'.href('page=calendar', 'mod='.@$event[$list_day]['year'], 'id='.@$event[$list_day]['month'],
'parent='.@$event[$list_day]['day']).'">'
.@$event[$list_day]['day'].
'</a>';
$calendar.= '</td>';
} else {
$calendar.= '<td class="calendar-day">';
$calendar .= @$event[$list_day]['day'];
$calendar.= '</td>';
}
/*Пишем номер в ячейку*/

if($running_day == 6) {
$calendar.= '</tr>';
if(($day_counter+1) != $days_in_month) {
$calendar.= '<tr class="calendar-row">';
}
$running_day = -1;
$days_in_this_week = 0;
}
$days_in_this_week++; $running_day++; $day_counter++;
}
}


else {
for($list_day = 1; $list_day <= $days_in_month; $list_day++) {
$calendar.= '<td class="calendar-day">';
/* Пишем номер в ячейку */
$calendar .= $list_day;
$calendar.= '</td>';
if($running_day == 6) {
$calendar.= '</tr>';
if(($day_counter+1) != $days_in_month) {
$calendar.= '<tr class="calendar-row">';
}
$running_day = -1;
$days_in_this_week = 0;
}
$days_in_this_week++; $running_day++; $day_counter++;
}
}


/* Выводим пустые ячейки в конце последней недели */
if($days_in_this_week < 8) {
for($x = 1; $x <= (8 - $days_in_this_week); $x++) {
$calendar.= '<td class="calendar-day-np"> </td>';
}
}

/* Закрываем последнюю строку */
$calendar.= '</tr>';
/* Закрываем таблицу */
$calendar.= '</table>';

/* Все сделано, возвращаем результат */
return $calendar;
}
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.