Класс календаря
Класс календаря позволяет динамически создавать календари. Календари могут быть отформатированы с помощью шаблона календаря, обеспечивая 100% контроль над каждым аспектом своей конструкции. Кроме того, вы можете передать данные в ячейки вашего календаря.
Использование класса календаря
Инициализация класса
Как и большинство других классов CodeIgniter, класс календаря инициализируется в контроллере используя функцию $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 (шаблон) | Нет | Нет |
|
local_time | time() | Нет | Метка времени Unix, соответствующую текущему времени. |
start_day | sunday (воскресенье) | Любой день недели (sunday(воскресенье), monday(понедельник), tuesday(вторник) и т.д.) | Установка дня недели начала календаря. |
month_type (тип месяца) | long | long (длинный), short (короткий) |
|
day_type (тип дня) | abr | long (длинный), short (короткий), abr (аббревиатура) |
|
show_next_prev (показывать след/пред) | FALSE | TRUE/FALSE (булево) |
|
next_prev_url (ссылка след/пред) | controller/method (контроллер/метод) | URL | Установка базовых URL, используемых в следующий/предыдущий ссылке. |
show_other_days (показывать другие дни) | FALSE | TRUE/FALSE (булево) |
|
Ссылки следующий/предыдущий месяц
Чтобы разрешить календарю динамическим увеличивать/уменьшать след/пред ссылки нужно настроить код календаря, похожим на этот пример:
$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” настройке. Если вы этого не сделаете, то будет установлен текущий контоллер/метод.
- Вы должны установить “year” и “month” в функцию производящую календарь по 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}"><<</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_start_today}<td>{/cal_cell_start_today}
{cal_cell_start_other}<td class="other-month">{/cal_cell_start_other}
{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_other}{day}{/cal_cel_other}
{cal_cell_end}</td>{/cal_cell_end}
{cal_cell_end_today}</td>{/cal_cell_end_today}
{cal_cell_end_other}</td>{/cal_cell_end_other}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table>{/table_close}
';
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();
Используя метод массива, вы передаете пару ключ => значение. Вы можете передать так много или так мало значения сколько пожелаете. Пропущенные ключи будут использовать значения по умолчанию наследуемые в классе календаря.
Пример:
$prefs['template'] = array(
'table_open' => '<table class="calendar">',
'cal_cell_start' => '<td class="day">',
'cal_cell_start_today' => '<td class="today">'
);
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();
Настройки класса
- class CI_Calendar
- initialize([$config = array()])
Параметры: - $config (массив) – Параметры конфигурации
Возвращает: CI_Calendar экземпляр (метод цепочек)
Возвращаемый тип: CI_Calendar
Инициализирует настройки календаря. Принимает ассоциативный массив в качестве входных данных, содержащих параметры отображения.
- generate([$year = ''[, $month = ''[, $data = array()]]])
Параметры: - $year (число) – Год
- $month (число) – Месяц
- $data (массив) – Данные для отображения в ячейках календаря
Возвращает: HTML-форматированный календарь
Возвращаемый тип: Строка
Генерирует календарь.
- get_month_name($month)
Параметры: - $month (число) – Месяц
Возвращает: Название месяца
Возвращаемый тип: Строка
Генерирует текстовое название месяца на основе номера месяца.
- get_day_names($day_type = '')
Параметры: - $day_type (строка) – ‘long’, ‘short’, or ‘abr’
Возвращает: Массив с названиями дней недели
Возвращаемый тип: Массив
Возвращает массив с названиями дней недели (Понедельник, Вторник и т.д.) исходя из предоставляемого типа. Опции: long (длинный), short(короткий), abr(аббревиатура). Если нет $day_type предоставляется (или если недопустимый тип)этот метод вернет “аббревиатуру”.
- adjust_date($month, $year)
Параметры: - $month (число) – Месяц
- $year (число) – Год
Возвращает: Ассоциативный массив содержащий месяц и год
Возвращаемый тип: Массив
Этот метод гарантирует что есть действительный месяц/год. Например, если вы укажите 13 как месяц, год увеличится и месяц будет январь:
print_r($this->calendar->adjust_date(13, 2014));
выведет:
Array ( [month] => '01' [year] => '2015' )
- get_total_days($month, $year)
Параметры: - $month (число) – Месяц
- $year (число) – Год
Возвращает: Количество дней в указанном месяце
Возвращаемый тип: Число
Количество дней в данном месяце:
echo $this->calendar->get_total_days(2, 2012); // 29
Примечание
Этот метод является псевдонимом для Date Helper функции days_in_month().