Класс календаря 

Класс календаря позволяет динамически создавать календари. Календари могут быть отформатированы с помощью шаблона календаря, обеспечивая 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 (короткий)
Определяет какую версию использовать в названии месяца.
long = Январь, short = Янв.
day_type (тип дня) abr long (длинный), short (короткий), abr (аббревиатура)
Определяет, какую версию использовать в названии дней недели
Заголовки столбцов. long = Воскресенье, short = Вос, abr = Вс.
show_next_prev (показывать след/пред) FALSE TRUE/FALSE (булево)
Определяет будут ли отображаться ссылки позволяющие переключаться
на след/пред месяц. Смотрите информацию об этой функции ниже.
next_prev_url (ссылка след/пред) controller/method (контроллер/метод) URL Установка базовых URL, используемых в следующий/предыдущий ссылке.
show_other_days (показывать другие дни) FALSE TRUE/FALSE (булево)
Определяет следует ли отображать дни других месяцев, которые разделяют
первую или последнюю неделю календарного месяца.

Создание шаблона календаря 

Создавая шаблон календаря у вас есть 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_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}&nbsp;{/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().

default_template() 
Возвращает:Массив значений шаблона
Возвращаемый тип:Массив

Устанавливает шаблон по умолчанию. Этот метод используется если еще не создан свой собственный шаблон.

parse_template() 
Возвращает:CI_Calendar экземпляр (метод цепочек)
Возвращаемый тип:CI_Calendar

Результаты данных в шаблоне {pseudo-variables} используются для отображения календаря.