Класс Calendaring (календарь)
Класс Calendaring позволяет вам динамически создавать календари. Ваши календари могут быть отформатированы с использованием шаблонов, позволяющих на 100% контролировать каждый аспект дизайна. К тому же, вы можете выводить данные в ячейки календаря.
Инициализация класса
Как большинство других классов в CodeIgniter, класс Calendaring инициализируется в вашем контроллере с помощью функции $this->load->library:
$this->load->library('calendar');
Загруженный объект Calendaring доступен через: $this->calendar
Отображение календаря
Вот простой пример, показывающий вам, как можно вывести календарь:
$this->load->library('calendar');
echo $this->calendar->generate();
Приведенный выше код будет генерировать календарь за текущий месяц/год, основываясь на текущем времени вашего сервера. Для того, чтобы показать календарь на определенный месяц и год, передайте эту информацию генерирующей функции:
$this->load->library('calendar');
echo $this->calendar->generate(2006, 6);
Этот код генерирует календарь на июнь 2006 года. Первый параметр обозначает год, второй — месяц.
Отправка данных в ячейки вашего календаря
Для того, чтобы добавить данные в ваш календарь, нужен ассоциативный массив с ключами, соответствующими дням, и значениями — которые необходимо передать в ячейки. Массив передается третьим параметром в генерирующую функцию. Рассмотрим пример:
$this->load->library('calendar');
$data = array(
3 => 'http://example.com/news/article/2006/03/',
7 => 'http://example.com/news/article/2006/07/',
13 => 'http://example.com/news/article/2006/13/',
26 => 'http://example.com/news/article/2006/26/'
);
echo $this->calendar->generate(2006, 6, $data);
В этом примере дни под номерами 3, 7, 13 и 26 станут ссылками, указывающими на указанные вами URL-ы.
Примечание: По умолчанию предполагается, что массив содержит ссылки. Ниже вы сможете увидеть, что возможно настроить передачу данных в ячейки, а можно передавать различные виды информации.
Настройка параметров отображения
Есть несколько настроек, которые вы можете использовать для того, чтобы контролировать календарь. Настройки устанавливаются посредством передачи массива во второй параметр функции. Вот пример:
$prefs = array (
'start_day' => 'saturday',
'month_type' => 'long',
'day_type' => 'short'
);
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();
Этот код генерирует календарь, начиная с субботы. Используется «длинное» название месяца, и «короткое» название дня. Подробная информация ниже.
Параметр | Значение по умолчанию | Доступные опции | Описание |
---|---|---|---|
template | — | — | Строка, содержащая шаблон календаря (см. ниже). |
local_time | time() | — | Текущее время в формате Unix timestamp. |
start_day | sunday | Any week day (sunday, monday, tuesday, etc.) | Первый день недели. |
month_type | long | long, short | Определяет тип названия месяца. Длинный long = Январь, короткий short = Янв. |
day_type | abr | long, short, abr | Определяет тип названия дня. Длинный long = Воскресенье, Короткий short = Вос, аббревиатура abr = Вс. |
show_next_prev | FALSE | TRUE/FALSE (boolean) | Отображать ли ссылки «Следующий/Предыдущий». Подробности ниже |
next_prev_url | — | A URL | Устанавливает основной путь для ссылок «Следующий/Предыдущий». |
Отображение ссылок «Следующий/Предыдущий»
Следующий код позволит вашему календарю отображать ссылки «Следующий/Предыдущий»:
$prefs = array (
'show_next_prev' => TRUE,
'next_prev_url' => 'http://example.com/index.php/calendar/show/'
);
$this->load->library('calendar', $prefs);
echo $this->calendar->generate($this->uri->segment(3), $this->uri->segment(4));
Вы заметите в этом примере:
- Вы должны установить "show_next_prev" в TRUE.
- Вы должны указать URL к контроллеру, обслуживающему ссылки на следующие и предыдущие дни.
- Вы должны предоставить «Год» и «Месяц» в генерирующей функции через сегменты URI там, где они появляются. (Примечание: Класс Calendaring автоматически добавляет месяц/год к основному URL, который вы указали)
Создание шаблона календаря
Создавая собственный шаблон календаря вы контролируете на 100% его дизайн. Каждый компонент будет отображен в соответствии с парой псевдопеременных, как показано здесь:
$prefs['template'] = '
{table_open}<table border="0" cellpadding="0" cellspacing="0">{/table_open}
{heading_row_start}<tr>{/heading_row_start}
{heading_previous_cell}<th><a href="{previous_url}"><<</a></th>{/heading_previous_cell}
{heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}
{heading_next_cell}<th><a href="{next_url}">>></a></th>{/heading_next_cell}
{heading_row_end}</tr>{/heading_row_end}
{week_row_start}<tr>{/week_row_start}
{week_day_cell}<td>{week_day}</td>{/week_day_cell}
{week_row_end}</tr>{/week_row_end}
{cal_row_start}<tr>{/cal_row_start}
{cal_cell_start}<td>{/cal_cell_start}
{cal_cell_content}<a href="{content}">{day}</a>{/cal_cell_content}
{cal_cell_content_today}<div class="highlight"><a href="{content}">{day}</a></div>{/cal_cell_content_today}
{cal_cell_no_content}{day}{/cal_cell_no_content}
{cal_cell_no_content_today}<div class="highlight">{day}</div>{/cal_cell_no_content_today}
{cal_cell_blank} {/cal_cell_blank}
{cal_cell_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table>{/table_close}
';
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();