Класс Calendaring
Класс Calendar позволяет динамически создавать календари. Ваши календари могут быть отформатированы с помощью шаблона календаря, позволяющего 100% контролировать все аспекты его дизайна. Кроме того, вы можете передавать данные в ячейки вашего календаря.
Использование класса Calendaring
Инициализация класса
Как и большинство других классов в 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://example.com/news/article/2006/06/03/',
7 => 'http://example.com/news/article/2006/06/07/',
13 => 'http://example.com/news/article/2006/06/13/',
26 => 'http://example.com/news/article/2006/06/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();
Вышеприведенный код запустит календарь с субботы, будет использовать «полное» название месяца и «краткое» название дней недели. Более подробная информация о параметрах ниже.
| Параметр | Значение по умолчанию | Варианты | Описание |
|---|---|---|---|
| шаблон | Нет | Нет |
|
| local_time | time() | Нет | Маркер времени Unix, соответствующий текущему времени. |
| start_day | воскресенье | Любой день недели (воскресенье, понедельник, вторник и т. д.) | Устанавливает день недели, с которого должен начинаться календарь. |
| month_type | полное | полное, краткое |
|
| day_type | сокращенное | полное, краткое, сокращенное |
|
| show_next_prev | ЛОЖЬ | ИСТИНА/ЛОЖЬ (булево) |
|
| next_prev_url | контроллер/метод | URL-адрес | Устанавливает базовый путь, используемый в ссылках на следующий/предыдущий календарь. |
| show_other_days | ЛОЖЬ | ИСТИНА/ЛОЖЬ (булево) |
|
Отображение ссылок на предыдущий/следующий месяц
Для того, чтобы ваш календарь мог динамически увеличивать/уменьшать значения с помощью ссылок «следующий/предыдущий», необходимо настроить код календаря, аналогично этому примеру:
$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» в ИСТИНА.
- Вы должны указать 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}"><<</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();
Используя массивный метод, вы будете передавать key => value пары. Вы можете передавать любое количество значений. Пропущенные ключи будут использовать значения по умолчанию, унаследованные в классе календаря.
Пример:
$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 (array) – Параметры конфигурации
Возвращает: Экземпляр CI_Calendar (цепление методов)
Тип возвращаемого значения: CI_Calendar
Инициализирует параметры календаря. Принимает ассоциативный массив с параметрами отображения.
-
generate([$year = ''[, $month = ''[, $data = array()]]]) -
Параметры: - $year (int) – Год
- $month (int) – Месяц
- $data (array) – Данные для отображения в ячейках календаря
Возвращает: Календарь в формате HTML
Тип возвращаемого значения: string
Генерирует календарь.
-
get_month_name($month) -
Параметры: - $month (int) – Месяц
Возвращает: Название месяца
Тип возвращаемого значения: string
Генерирует текстовое название месяца на основе числового значения месяца.
-
get_day_names($day_type = '') -
Параметры: - $day_type (string) – ‘long’, ‘short’, или ‘abr’
Возвращает: Массив названий дней
Тип возвращаемого значения: array
Возвращает массив названий дней недели (воскресенье, понедельник и т.д.) в зависимости от указанного типа. Доступные варианты: long, short, abr. Если тип не указан (или указан неверный тип), метод вернёт значение в формате “abbreviated”.
-
adjust_date($month, $year) -
Параметры: - $month (int) – Месяц
- $year (int) – Год
Возвращает: Ассоциативный массив, содержащий месяц и год
Тип возвращаемого значения: array
Этот метод проверяет корректность введённого месяца и года. Например, если в качестве месяца передано 13, год увеличится, а месяц станет январем:
print_r($this->calendar->adjust_date(13, 2014));
вывод:
Array ( [month] => '01' [year] => '2015' )
-
get_total_days($month, $year) -
Параметры: - $month (int) – Месяц
- $year (int) – Год
Возвращает: Количество дней в указанном месяце
Тип возвращаемого значения: int
Количество дней в заданном месяце:
echo $this->calendar->get_total_days(2, 2012); // 29
Примечание
Этот метод является псевдонимом для функции Помощника дат
days_in_month().
-
default_template() -
Возвращает: Массив значений шаблона Тип возвращаемого значения: array Устанавливает шаблон по умолчанию. Этот метод используется, когда вы не создали свой собственный шаблон.
-
parse_template() -
Возвращает: Экземпляр CI_Calendar (цепление методов) Тип возвращаемого значения: CI_Calendar Извлекает данные из шаблона
{pseudo-variables}для отображения календаря.
-
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/calendar.html