PHP класс для генерации умных календарей

Предоставляет простой API для генерации HTML кода календарей. Был написан для собственных нужд и, в порыве человеколюбия, выложен в public domain.

Где взять?

Здесь: http://things.paradigm.ru/calendar.class/calendar.class.zip

Что умеет?

  • Умеет генерировать календарь на отдельно заданный месяц или год.
  • Имеет многоязычную поддержку. Названия месяцев и дней недели, могут отображаться на русском и английском языках (этот набор языков легко расшириряется).
  • Первым днём недели можно задать воскресенье или понедельник — по необходимости.
  • Опционально выдеяет текущую (заданную) дату и выходные дни (воскресенье или субботу и воскресенье).
  • Умеет привязывать к заданным датам гиперссылки и фрагменты текста, которые отображаются в виде хинтов при наведении курсора.
  • Оформление сделано полностью через внешние таблицы стилей. В комплект поставки входит три разных типа оформления, по образу и подобию которых можно делать свои собственные.

Как все выглядит?

Ниже приведены несколько скриншотов сгенерированных календарей. По клику на любом из них откроется страница с соответствующим примером кода и сами календари вживую.

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

Несколько примеров определения CSS-классов для календарей.

Комментарии к заметке «PHP класс для генерации умных календарей»

# Александр: (26 ноября, 2008 @ 15:07)

Скрипт хороший. Искал как раз генератор календаря.
Единственное, не понял, как выставлять язык – ru
Надеюсь, автор пояснит…
Спасибо!

# mihdan: (17 декабря, 2008 @ 12:41)


$calendar = new Calendar();
$calendar->lng = 'ru';

# Дмитрий: (23 февраля, 2009 @ 08:14)

Я пробка но чтото понять немагу как его запустить чтото работать нехочет, хотелось бы чтобы автор еще для ламоботов объяснил как календарь воткнуть в страницу и чтобы он работал.

# Дмитрий: (23 февраля, 2009 @ 08:17)

Забыл дописать что он у меня выдает
Fatal error: Class ‘Calendar’ not found in C:\www\html\calendar\demo4.php on line 2
т.е. ему ненравица строка $c = new Calendar();
что в ней должно быть?

# admin: (23 февраля, 2009 @ 11:26)

По всей видимости, не подключен файл, в котором определен Calendar. Стоит внимательнее смотерть на пример (точка входа на в demo4.php).

# mihdan: (23 февраля, 2009 @ 19:46)

Перед инициализацие класса Calendar(), его необходимо подключить
Например так

include_once ‘calendar.class.php’;
$cal = new Calendar();

# Юрий: (29 апреля, 2009 @ 11:28)

А в классе предусмотрен переход Назад Вперед по месяцам при показе всего одного месяца? Или придется реализовывать самому?

# admin: (29 апреля, 2009 @ 12:31)

Юрий: Этот класс не про навигацию, а про отрисовку календаря. Ссылки на «соседние» страницы так или иначе придется реализовывать отдельно.

# mihdan: (29 апреля, 2009 @ 13:05)

Юрий, а в чем у вас проблема?

# Юрий: (29 апреля, 2009 @ 13:39)

Листание месяцев сделал. нашел проблему – сегодня 29 число. если я листаю назад и вперед и дохожу до февраля – показывает март! причем два раза. я думаю что проблема именно в 29 числе. делаю вручную $currentMonth = strtotime(‘-2 month’); без своих заморочек с листанием – получаю все равно март.

# Юрий: (29 апреля, 2009 @ 13:47)

пробовал менять число – все равно при -2 – дает март. а не февраль.

# Юрий: (29 апреля, 2009 @ 14:11)

сделал так
$d1 = getdate();
$day1 = $d1["mday"];
$currentMonth = strtotime(‘+’.@$_SESSION['monthjump'].’ month’);
if ($day1==29) $currentMonth = strtotime(‘+’.@$_SESSION['monthjump'].’ month -1 day’);

наверняка получу ошибку в высокосный год. но хотя бы так пока более умного не придумается.

# mihdan: (29 апреля, 2009 @ 14:49)

На проекте инфоШОС http://infoshos.ru стоит календарь разработанный на данном классе, как видите – ошибок нет

# Юрий: (29 апреля, 2009 @ 15:01)

mihdan – так там и листание идет не стрелочками влево-вправо а выбором конкретно года и месяца – там не может быть ошибки.

# Василий: (18 мая, 2009 @ 17:21)

использую demo4.php
у меня класс подключить так как тут советовали:
include_once ‘calendar.class.php’;
$cal = new Calendar();
не вышло, подключил следующим образом:
nclude_once(‘./calendar.class.php’);
$c = new Calendar();

но увы не подключаются стили хотя ошибок не выдается :(
что может быть не так подскажите пожалуйста

# admin: (18 мая, 2009 @ 17:30)

Василий: Стили подключаются в заголовке HTML документа. С PHP кодом это никак не связано. Поправьте путь к CSS файлу в соответствующем теге link.

# Василий: (18 мая, 2009 @ 18:10)

прошу прощения наверно неправильно описал проблему (или чего то я сам не понял , увы мне) :
в последнем примере demo4.php. где отрисовываются 3 месяца насколько я разобрался за включение определений CSS-классов для календарей отвечает :
$c->setCssPrefix(‘red_’); а затем отрисовка месяца в соответствующем стиле:
echo $c->genUMonth($prevMonth);
вот єто и не работает

setCssPrefix описан в calendar.class.php, сам CSS описан в calendar_red.css
можно предположиь, что, в данном случае, проблема возможно не в теге link?

# admin: (18 мая, 2009 @ 18:35)

Василий: Посмотрите на сгенерированный HTML код. Если префиксы red_ присутствуют в именах CSS классов, значит код сгенерировался нормально, и причина отсутствия правильных стилей может быть только в том, что .css не подключился.

# Василий: (19 мая, 2009 @ 08:38)

Прошу прощения, Вы были правы. я не туда смотрел, все дело было таки да. в теге link

# Zheban: (4 июня, 2009 @ 11:27)

А как вообще ставить его?

# mihdan: (5 июня, 2009 @ 12:46)

http://things.paradigm.ru/calendar.class/#c04

# koldun666: (14 октября, 2009 @ 15:11)

Огромное спасибо! Все прекрасно работает.

# nikolay: (29 октября, 2009 @ 15:03)

Здравствуйте, подскажите как автоматически привязать к числу месяца гиперссылку вида 2009/1001/ например. Спасибо. Чтобы в календаре автоматически проставлялись ссылки?

# admin: (29 октября, 2009 @ 15:23)

nikolay: Например, так:

for($i = 1; $i < 13; $i++)
  $calendar->addDateTitle(10, $i, 2009, "http://example.com/2009/" + $i);

# nikolay: (29 октября, 2009 @ 16:33)

Спасибо! А дни случайно не подскажите чтобы после $i еще и день выводился по порядку. Спасибо еще раз.

# admin: (29 октября, 2009 @ 17:53)

nikolay:

... + $i + "/" + date("l", [нужная дата и время]) ...

http://php.net/manual/en/function.date.php

# nikolay: (30 октября, 2009 @ 17:03)

Спасибо большое за помощь! Единственное что не могу решить как вывести нужный мне день в ссылке. Сейчас 1,2, 3, 4 и тд. а надо чтобы начиналось с 01,02,03. Еще раз спасибо. Может класс где-то подправить?
Код вот.
for($i = 1; $i addDateLink($i, 10, 2009, “http://www.example.com/2009/10$i”);

# admin: (30 октября, 2009 @ 17:30)

nikolay: Префиксный ноль при выводе чисел можно сделать функциями sprintf(), date() и, возможно, number_format(). Форматирование URL не относится к функционалу календаря, поэтому грамотнее его делать вне класса. Может, книжку про php прочитать, м?

# Александр: (22 декабря, 2009 @ 14:13)

Добрый день! Сделал из ваших образцов вот такой календарик.

setLang(‘ru’);
$c->setOptions(CLD_MONDAYS | CLD_MARKSATSUN);
$c->setCssPrefix(‘blank_’);
$currentMonth = time();
echo $c->genUMonth($currentMonth, true);
?>

Но почему то по русски пишет не правильно названия дней:

дЕЙЮАПЭ
оМ бР яП вР оР яА бЯ
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

# admin: (24 декабря, 2009 @ 13:41)

Александр: Видимо, в браузере кодировка сбилась. Нужно ее поправить в HTTP заголовоке или в <head> прописать правильную. Ну или включить автоопределение, если оно не работает.

# Сергей: (14 мая, 2010 @ 18:43)

Здравствуйте! Нужна помощь,нужно сделать чтобы в календаре выделялись выходные дни и первый день стоял понедельник а не воскресенье,менял разные значения но у меня ничего не вышло

# Exorcist: (24 мая, 2010 @ 05:21)

Отличный календарь. А как его модифицировать под AJAX. Чтобы можно было листать календарь влево вправо по месяцам?

# Dmitriy: (4 сентября, 2010 @ 01:42)

Хочу, но не знаю, куда и как в букс поместить календарь! Экспериментировал, однако, нечего не получилось! Пожалуйста, подскажите, как и куда в Букс установить календарь, чтоб работал! Mtnuleft.php – побывал но не знаю почему не работает!

Написать комментарий

Можно использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> .