сегодня впервые мне удалось написать ООП код от которого я почти не испытываю тошнотворного ощущения как обычно бывало раньше
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=>"воскресение", ) );
Комментариев нет:
Отправить комментарий