Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.3

Search User Guide

# Класс Calendaring — календарь

Класс календаря позволяет вам динамически создавать календари. Ваши календари могут форматироваться, используя шаблон календаря, позволяющий на 100% контролировать любой аспект его дизайна. К тому же вы можете передавать данные в ячейки календаря.

## Инициализация класса

Как и большинство других классов в CodeIgnter, класс календаря инициализируется в вашем контроллере, используя функцию $this->load->library:

`$this->load->library('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://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 | None | None | Строка, содержащая шаблон календаря. Смотрите раздел шаблона ниже.
local_time | time() | None | Временная метка Unix, обозначающая текущее время.
start_day | sunday | Любой день недели (sunday, monday, tuesday, etc.) | Устанавливает день недели, с которого начинается календарь.
month_type | long | long, short | Определяет, какую версию названия месяца использовать в календаре. Длинный = January, короткий = 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://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 к контроллеру, содержащему ваш календарь, в параметре "next_prev_url".
- Вы должны передать год и месяц генерирующей функции через сегменты URI, где они появляются (примечание: класс календаря автоматически добавляет год и месяц к основному 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}`">&lt;&lt;</a></th>{/heading_previous_cell}
{heading_title_cell}<th colspan="`{colspan}`">`{heading}`</th>{/heading_title_cell}
{heading_next_cell}<th><a href="`{next_url}`">&gt;&gt;</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}&nbsp;{/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();`

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter