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

Тема в разделе "Как сделать...", создана пользователем kuzmit42, 5 мар 2015.

  1. kuzmit42

    kuzmit42 Постоялец

    Регистр.:
    9 янв 2013
    Сообщения:
    131
    Симпатии:
    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 <= ($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\" />";
    ?>
    [​IMG]
     

    Вложения:

    • test.zip
      Размер файла:
      3,2 КБ
      Просмотров:
      1
    Последнее редактирование: 5 мар 2015
  2. kuzmit42

    kuzmit42 Постоялец

    Регистр.:
    9 янв 2013
    Сообщения:
    131
    Симпатии:
    31
    Ну и дела. только написал тему на форум - сразу нашел решение.
    Пофиксенный календарь прикрепил.
    PHP:
    // Эту строку
    if($days_in_this_week 8):
    // Меняем на эту строку
    if(($days_in_this_week 8)and($days_in_this_week !=1)):
     

    Вложения: