суббота, 2 марта 2013 г.

календарь на php

сегодня впервые мне удалось написать ООП код от которого я почти не испытываю тошнотворного ощущения как обычно бывало раньше
class Calendar{
    private $date; //сдесь храним дату на которую делаем календарь
    private $arr_calendar; //массив из всех дат(DateTime) месяца 
    function __construct(DateTime $date) { //принимаем только формат DateTime
        $this->date=$date;
    }
    /**
     * функция возвращает массив обектов состоящих из дат текущего месяца
     * @return array
     */
    function get_calendar(){ 
        // идем от 1 числа по всем числам месяца
        for ($i=1;$this->date->format('t')>=$i;$i++){
            $this->arr_calendar[] = new DateTime($i.".".$this->date->format('m').".".$this->date->format('Y'));
        }
        return $this->arr_calendar;
    }
    /**
     * отображает календарь
     * @param array $calendar_format 
     * example 
     * array(
                1=>"понедельник",
                2=>"вторник",
                3=>"среда",
                4=>"четверг",
                5=>"пятница",
                6=>"суббота",
                7=>"воскресение",
            )
     */
    function show_calendar($calendar_format){
        // пока сделано без MVC
        $this->get_calendar(); //получаем календарь в массив
        $run=true;
        echo "<table>";
           echo "<tr>";
                    echo "<td colspan=7>";
                        echo $this->date->format('d.m.Y');
                    echo "</td>";

            echo "</tr>";

            echo "<tr>";
                foreach($calendar_format as $day_name){
                    echo "<td>";
                        echo "<b>".$day_name."</b>";//выводим название недели в загаловке таблицы
                    echo "</td>";
                }
            echo "</tr>";
            while ($run){
                echo "<tr>";
                foreach($calendar_format as $key_dat=>$day_name){
                    if (current($this->arr_calendar)->format('N')==$key_dat){
                        echo "<td>";
                            
                            //проверяем на текущею дату если текущая то выделяем красным
                            if ($this->test_curret_date(current($this->arr_calendar))){
                                echo '<b style="color: red;">';
                            }
                                
                                echo current($this->arr_calendar)->format('d');//выводим активный элемент массива
                                
                            //проверяем на текущею дату 
                            if ($this->test_curret_date(current($this->arr_calendar))){
                                echo "</b>";
                            }
                             
                        echo "</td>";
                        next($this->arr_calendar);//переходим на следущий элемент массива
                        //
                        //проверка конца массива если конец выходим из цикла 
                        if (current($this->arr_calendar)->format('d')==$this->date->format('t')){
                            $run=false;
                        }
                    }else{
                        echo "<td></td>";
                    }
                }
            }
            echo "</tr>";
        echo "</table>";
    }
    /**
     * если переданная дата будет равна дате $this->date то вернем true
     * @param DateTime $current_date проверяемая дата 
     * @return boolean
     */
    private function test_curret_date(DateTime $current_date){
        if ($current_date->format('d.m.Y')==$this->date->format('d.m.Y')){
            return true;
        }else{
            return false;
        }
    }
}

$calendar = new Calendar(new DateTime("11.05.2010"));

$calendar->show_calendar(
            array(
                1=>"понедельник",
                2=>"вторник",
                3=>"среда",
                4=>"четверг",
                5=>"пятница",
                6=>"суббота",
                7=>"воскресение",
            )
        );


Комментариев нет:

Отправить комментарий

PHP: The Right Way блог програмышки
Яндекс.Метрика