Помогите найти косяк в календаре.

kuzmit42

Мастер
Регистрация
9 Янв 2013
Сообщения
132
Реакции
31
Помогите пожалуйста выловить глюк, с добавлением лишней строки в календаре.
Скрин, сам скрипт, и пример кода прилепил.
Уже запарился не могу понять в чем причина, не могу поправить.
Подскажите пожалуйста кому не сложно.
PHP:
<?php
    /* Функция генерации календаря */
    function draw_calendar($month,$year){
        /* Начало таблицы */
        $month_names=array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"); // Месяц буквами
        $month_number=array("01","02","03","04","05","06","07","08","09","10","11","12");  // Месяц числом
        $date = date("Y.m.d"); // Сегодняшняя дата
        $god = "2015";
        $tarif_s = $GLOBALS["tarif_s"];
        //echo $date;
         
        $calendar = '<section class="container">
        <div class="cal">
        <table class="cal-table">
            <caption class="cal-caption">
             <!--a href="index.html" class="prev">&laquo;</a>
             <a href="index.html" class="next">&raquo;</a-->
             '.$month_names[$month-1].'
           </caption>
       <tbody class="cal-body">';
        /* Заглавия в таблице */
        $headings = array('Пн','Вт','Ср','Чт','Пт','Сб','Вс');
    //    $calendar.= '<tr class=""><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;
        if ($running_day == 0){
            $running_day = 6;
        }
        else {
            $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;
        $dates_array = array();
        /* первая строка календаря */
        $calendar.= '<tr class="calendar-row">';
        /* вывод пустых ячеек в сетке календаря */
        for($x = 0; $x < $running_day; $x++):
            $calendar.= '<td class="calendar-day-np"><span>&nbsp;</span></td>';
            $days_in_this_week++;
        endfor;
        /* дошли до чисел, будем их писать в первую строку */
        for($list_day = 1; $list_day <= $days_in_month; $list_day++):
            $calendar.= '<td>'; //$calendar.= '<td class="calendar-day">';
                // Формируем нужную дату (добавляем ноль к дню)
                if ($list_day <= 9) {
                    $day = "0".$list_day;
                } else {
                    $day = $list_day;
                }
             
                $date_total = $year.".".$month_number[$month-1].".".$day;
                $date_total_virus = "d".$year.$month_number[$month-1].$day;
             
                if (($date_total >= $tarif_s) && ($date_total <= $date)) {
                   $calendar.= '<a href="#" class="day-a">'.$list_day.'</a>';
                } else {
                    $calendar.= '<span class="day">'.$list_day.'</span>';
                }
             
                /* Пишем номер в ячейку */
            //    $calendar.= '<div class="day-number"><a href="#" title="'.$date_total.'">'.$list_day.'</a></div>';
                /** ЗДЕСЬ МОЖНО СДЕЛАТЬ MySQL ЗАПРОС К БАЗЕ ДАННЫХ! ЕСЛИ НАЙДЕНО СОВПАДЕНИЕ ДАТЫ СОБЫТИЯ С ТЕКУЩЕЙ - ВЫВОДИМ! **/
                $calendar.= str_repeat('',2);
       
            $calendar.= '</td>';
            if($running_day == 6):
                $calendar.= '</tr>';
                if(($day_counter+1) != $days_in_month):
                    $calendar.= '<tr class="calendar-row">';
                endif;
                $running_day = -1;
                $days_in_this_week = 0;
            endif;
            $days_in_this_week++; $running_day++; $day_counter++;
        endfor;
        /* Выводим пустые ячейки в конце последней недели */
        if($days_in_this_week < 8):
            for($x = 1; $x <= (8 - $days_in_this_week); $x++):
                $calendar.= '<td class="calendar-day-np"><span>&nbsp;</span></td>';
            endfor;
        endif;
        /* Закрываем последнюю строку */
        $calendar.= '</tr>';
        /* Закрываем таблицу */
        $calendar.= '</tbody></table></div></section>';

        /* Все сделано, возвращаем результат */
        return $calendar;
    }
 
    /* Вывод календаря по месяцам */
    $god = "2015";
    echo draw_calendar(1,$god);
    echo draw_calendar(2,$god);
    echo draw_calendar(3,$god);
    echo "<br class=\"clr\" />";

    echo draw_calendar(4,$god);
    echo draw_calendar(5,$god);
    echo draw_calendar(6,$god);
    echo "<br class=\"clr\" />";
 
    echo draw_calendar(7,$god);
    echo draw_calendar(8,$god);
    echo draw_calendar(9,$god);
    echo "<br class=\"clr\" />";

    echo draw_calendar(10,$god);
    echo draw_calendar(11,$god);
    echo draw_calendar(12,$god);
    echo "<br class=\"clr\" />";
?>
e584d398adfb.jpg
 

Вложения

  • test.zip
    3,2 KB · Просмотры: 1
Последнее редактирование:
Ну и дела. только написал тему на форум - сразу нашел решение.
Пофиксенный календарь прикрепил.
PHP:
// Эту строку
if($days_in_this_week < 8):
// Меняем на эту строку
if(($days_in_this_week < 8)and($days_in_this_week !=1)):
 

Вложения

  • calendar-fix.zip
    3,2 KB · Просмотры: 4
Назад
Сверху