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