Calendar - класс вывода календаря

 

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

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

Как и большинство классов в CodeIgniter, класс Calendar инициализируется при помощи конструкции $this->load->library :

  1. $this->load->library('calendar');

После инициализации объект Calendar доступен как $this->calendar.

Вывод календаря

Вот простой пример вывода календаря:

  1. $this->load->library('calendar');
  2.  
  3. echo $this->calendar->generate();

Код в примере выше сгенерирует календарь используюя текущий день и месяц опираясь на текущее серверное время. Чтобы сгенерировать календарь на определенный месяц и год, нужно передать эти данные функции генерирования календаря:
  1. $this->load->library('calendar');
  2.  
  3. echo $this->calendar->generate(2006, 6);

Код в примере выше сгенерирует календарь для июня 2006 года. Первый параметр указывает год, второй - месяц.

Передача данных для ячейки календаря

Для того, чтобы передать данные для ячеек календаря, нужно указать ассоциативный массив, в котором ключи являются днями месяца, а значения - данными, которые нужно передать в соответствующую ячейку каленадря. Данный массив передается третьим параметром функции генерации календаря:

  1. $this->load->library('calendar');
  2.  
  3. $data = array(
  4. 3 => 'http://your-site.com/news/article/2006/03/',
  5. 7 => 'http://your-site.com/news/article/2006/07/',
  6. 13 => 'http://your-site.com/news/article/2006/13/',
  7. 26 => 'http://your-site.com/news/article/2006/26/'
  8. );
  9.  
  10. echo $this->calendar->generate(2006, 6, $data);

В приведенном выше примере ячейки для чисел 2,7,13,26 станут ссылками на заданные URL.
Примечание: по умолчанию подразумевается, что переданный массив содержит ссылки. Далее будет рассмотрена тема шаблонов календаря, которые позволяют определить, какие данные передаются в ячейки календаря и как они обрабатываются.

Настройки отображения календаря

Существует семь опций, которые вы можете задать для управления различными аспектами календаря. Настройки задаются при за счет передачи массива в качестве второго параметра функции загрузки класса:

  1. $prefs = array (
  2. 'start_day' => 'saturday',
  3. 'month_type' => 'long',
  4. 'day_type' => 'short'
  5. );
  6.  
  7. $this->load->library('calendar', $prefs);
  8.  
  9. echo $this->calendar->generate();

Приведенный выше код задает субботу в качестве первого дня недели, использование "длинного" заголовка месяца и "коротких" названий дней недели. Более детальная информация о настройках класса:

Параметр Значение по умолчанию Опции Описание
template нет нет Строка содержащая шаблон календаря (см. ниже)
local_time time() нет Время в формате Unix соответствующее текущему времени
start_day воскресенье любой день недели (sunday,monday ...) Задает первый день недели календаря
month_type long long, short Задает формат вывода названия месяца. long - Январь, short - Янв
day_type abr long,short,abr Задает формат вывода названия дня недели.long - Воскресенье, short - Воскр, abr - Вс
show_next_prev FALSE TRUE/FALSE (boolean) Указывает, нужно ли отображать ссылки на следующий/предыдущий месяц. Данная функциональность описана ниже.
next_prev_url нет URL Указывает базовый URL для ссылок на предыдущий/следующий месяц

Вывод ссылки на следующий/предыдущий месяц

Для того, чтобы календарь автоматически переключался на следующий/предыдущий месяц при помощи соответствующих ссылок, нужно настроить его при помощи кода, близкого к данному примеру:

  1. $prefs = array (
  2. 'show_next_prev' => TRUE,
  3. 'next_prev_url' => 'http://www.your-site.com/index.php/calendar/show/'
  4. );
  5.  
  6. $this->load->library('calendar', $prefs);
  7.  
  8. echo $this->calendar->generate($this->uri->segment(3), $this->uri->segment(4));

Обратите внимание на следующее:

  • Нужно установить параметр show_next_prev в TRUE
  • Необходимо передать URL в качестве базового при помощи параметра next_prev_url
  • Нужно передать год и месяц в качестве параметров функции генерации календаря на основе сегментов URL (Класс Calendar автоматически добавит сегменты URL к базовому адресу, который вы зададите.

Разработка шаблона календаря

За счет разрабоки шаблона календаря вы получаете полный контроль над дизайном календаря. Каждый из элементов календаря будет размещен в рамках псевдо-переменных как показано в следующем примере:

  1. $prefs['template'] = '
  2.  
  3. {table_open}<table border="0" cellpadding="0" cellspacing="0">{/table_open}
  4.  
  5. {heading_row_start}<tr>{/heading_row_start}
  6.  
  7. {heading_previous_cell}<th><a href="{previous_url}">&lt;&lt;</a></th>{/heading_previous_cell}
  8. {heading_title_cell}<th colspan="{colspan}">{heading}</th>{/heading_title_cell}
  9. {heading_next_cell}<th><a href="{next_url}">&gt;&gt;</a></th>{/heading_next_cell}
  10.  
  11. {heading_row_end}</tr>{/heading_row_end}
  12.  
  13. {week_row_start}<tr>{/week_row_start}
  14. {week_day_cell}<td>{week_day}</td>{/week_day_cell}
  15. {week_row_end}</tr>{/week_row_end}
  16.  
  17. {cal_row_start}<tr>{/cal_row_start}
  18. {cal_cell_start}<td>{/cal_cell_start}
  19.  
  20. {cal_cell_content}<a href="{content}">{day}</a>{/cal_cell_content}
  21. {cal_cell_content_today}<div class="highlight"><a href="{content}">{day}</a></div>{/cal_cell_content_today}
  22.  
  23. {cal_cell_no_content}{day}{/cal_cell_no_content}
  24. {cal_cell_no_content_today}<div class="highlight">{day}</div>{/cal_cell_no_content_today}
  25.  
  26. {cal_cell_blank}&nbsp;{/cal_cell_blank}
  27.  
  28. {cal_cell_end}</td>{/cal_cell_end}
  29. {cal_row_end}</tr>{/cal_row_end}
  30.  
  31. {table_close}</table>{/table_close}
  32. ';
  33.  
  34. $this->load->library('calendar', $prefs);
  35.  
  36. echo $this->calendar->generate();

Отправить комментарий

CAPTCHA
Этот вопрос предназначен для того, чтобы отсеять ботов
1 + 12 =
Решите простой математический пример и введите результат. К примеру, для вопроса 1+3 нужно ввести 4

Вход в систему

Последние комментарии