Класс Calendar
Класс Calendar позволяет динамически создавать календари. Отображение вашего календаря может быть изменено с помощью использования шаблонов календаря, которые предоставляют полный контроль над каждым аспектом его дизайна. Также вы можете поместить данные в ячейки календаря.
Инициализация Класса
Как и многие другие классы в CodeIgniter, класс Calendar инициализируется в вашем контроллере с использованием функции $this->load->library:
$this->load->library('calendar');
Однажды загруженный, объект Calendar будет доступен, с использованием: $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://your-site.com/news/article/2006/03/',
7
=> 'http://your-site.com/news/article/2006/07/',
13
=> 'http://your-site.com/news/article/2006/13/',
26
=> 'http://your-site.com/news/article/2006/26/'
);
echo $this->calendar->generate(2006, 6, $data);
Используя вышеприведенный пример, дни 3, 7, 13, и 26 наделяются ссылками, указывающими на предусмотренные вами страницы.
Примечание: По умолчанию предполагается, что ваш массив содержит ссылки. В секции, рассказывающей о шаблонах календаря, вы увидете как вы можете изменить отображение данных в ячейках календаря.
Установка предпочтений отображения
Вы можете установить семь предпочтений для управления отображением календаря. Предпочтения устонавливаются отправкой массива предпочтений вторым параметром функции загрузки. Пример:
$prefs = array (
'start_day'
=> 'saturday',
'month_type' => 'long',
'day_type'
=> 'short'
);
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();
Вышеприведенный код отображает календарь, начинающийся с субботы, использующий "длинный" заголовок месяца и "короткие" имена дней недели. Больше информации, касательно преподчтений отображения, приведено ниже.
Предпочтение | Значение по умолчанию | Параметры | Описание |
---|---|---|---|
template | None | None | Строка, содержащая шаблон вашего календаря. О шаблонах смотрите секцию "Создание шаблонов календаря". |
local_time | time() | None | Соответствующий текущему времени unix timestamp. |
start_day | sunday | Any week day (sunday, monday, tuesday, etc.) | Устанавливает с какого дня недели начинать отображение календаря. |
month_type | long | long, short | Определяет отображение имени месяца в заголовке. long = January, short = Jan. |
day_type | abr | long, short, abr | Определяет отображение дней недели в заголовках колонок. long = Sunday, short = Sun, abr = Su. |
show_next_prev | FALSE | TRUE/FALSE (boolean) | Определяет отображение ссылок на следующий/предыдущий месяц. Смотрите информацию об этой возможности ниже. |
next_prev_url | None | A URL | Устанавливает базовый путь, используемый ссылками следующий/предыдущий в календаре. |
Отображение ссылок на следующий/предыдущий месяц
Чтобы разрешить вашему календарю менять месяц и год через ссылки следующий/предыдущий, требуется установить код вашего календаря, подобный этому:
$prefs = array (
'show_next_prev' =>
TRUE,
'next_prev_url'
=> 'http://www.your-site.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 в предпочтение "next_prev_url".
- Вы должны предоставить "year" и "month" функции, генерирующей календарь, через сегменты URI, когда они показываются. (Примечание: Класс календаря автоматически добавляет год/месяц к базовому URL, предоставленному вами.).
Создание шаблонов календаря
Создав шаблон календаря, вы получаете полный контроль над отображением вашего календаря. Каждый компонент вашего календаря будет размещен внутри пары псевдо-переменных как показано здесь:
$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();