Приднестровская поддержка XOOPS
Добавление событий в отображение календаря сводится к загрузке массива 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=" "; }
/*
* Если текущий день суббота, перейти в следующий ряд
*/
$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"> </li>";
++$i;
}
/*
* Закрыть окончательный неупорядоченный список
*/
$html .= "\n\t</ul>\n\n";
/*
* Возвратить HTML-разметку для вывода
*/
return $html;
}
Когда события из базы данных загружены в вывод календаря, их названия отображаются рядом с соответствующими датами (рис. 4.6).
Рис. 4.6. Отображение названий событий для соответствующих дат
Отправитель | Нити |
---|
20 пользователь(ей) активно (6 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 20 далее... |