Оглавление

Отображение событий в календаре

Добавление событий в отображение календаря сводится к загрузке массива events из функции _createEventObj() и организации цикла для поиска событий с индексом, совпадающим с текущим днем, если таковые существуют. Информация о событии добавляется в разметку календаря с помощью кода, выделенного в приведенном ниже листинге желтым фоном.

 


	public function buildCalendar() 
    { 
        /* 
         * Определить месяц календаря и создать массив сокращенных 
         * обозначений дней недели, которые будут использованы
		 * в заголовках столбцов
         */ 
        $cal_month = date('F Y', strtotime($this->_useDate)); 
        $weekdays = array('Sun', 'Mon', 'Tue', 
                'Wed', 'Thu', 'Fri', 'Sat'); 
 
        /* 
         * Добавить заголовок в HTML-разметку календаря 
    */ 
   $html = "\n\t<h2>$cal_month</h2>"; 
   for ( $d=0, $labels=NULL; $d<7; ++$d ) 
   { 
       $labels .= "\n\t\t<li>" . $weekdays[$d] . "</li>"; 
   } 
   $html .= "\n\t<ul class="weekdays">" 
       . $labels . "\n\t</ul>"; 
   
/* * Загрузить данные о событиях */ $events = $this->_createEventObj();
/* * Создать HTML-разметку календаря */ $html .= "\n\t<ul>"; // Начало нового маркированного списка for ( $i=1, $c=1, $t=date('j'), $m=date('m'), $y=date('Y'); $c<=$this->_daysInMonth; ++$i ) { /* * Принять класс "fill" к ячейкам календаря. * располагающимся перед первым днем данного месяца */ $class = $i<=$this->_startDay ? "fill" : NULL; /* * Добавить класс "today", * если дата совпадает с текущей */ if ( $c+1==$t && $m==$this->_m && $y==$this->_y ) { $class = "today"; } /* * Создать открывающий и закрывающий дескрипторы элемента списка */ $ls = sprintf("\n\t\t<li class="%s">", $class); $le = "\n\t\t</li>"; /* * Добавить день месяца, идентифицирующий ячейку календаря */ if ( $this->_startDay<$i && $this->_daysInMonth>=$c) {
/* * Форматировать данные о событиях */ $event_info = NULL; // очистить переменную if ( isset($events[$c]) ) { foreach ( $events[$c] as $event ) { $link = '<a href="view.php?event_id=' . $event->id . '">' . $event->title . '</a>'; $event_info .= "\n\t\t\t$link"; } }
$date = sprintf("\n\t\t\t<strong>%02d</strong>",$c++); } else { $date="&nbsp;"; } /* * Если текущий день суббота, перейти в следующий ряд */ $wrap = $i!=0 && $i%7==0 ? "\n\t</ul>\n\t<ul>" : NULL;
/* * Собрать разрозненные части воедино */ $html .= $ls . $date . $event_info . $le . $wrap;
} /* * Добавить заполнители для завершения последней недели */ while ( $i%7!=1 ) { $html .= "\n\t\t<li class="fill">&nbsp;</li>"; ++$i; } /* * Закрыть окончательный неупорядоченный список */ $html .= "\n\t</ul>\n\n"; /* * Возвратить HTML-разметку для вывода */ return $html; }

 

Предупреждение. Обратите внимание на добавление новой переменной $event_in f о в разметку в нижней части цикла,


Когда события из базы данных загружены в вывод календаря, их названия отображаются рядом с соответствующими датами (рис. 4.6).

 

Примечание. Ссылки в виде названий событий указывают на файл view. php, который пока еще не существует. Этот файл будет создан и описан далее.

 

Отображение названий событий для соответствующих дат

 Рис. 4.6. Отображение названий событий для соответствующих дат

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити