Добрый день всем читателям нашего блога! Сегодня я решил чиркануть короткую, но довольно полезную заметку, касающуюся календаря в SugarCRM. Я думаю, вы уже заметили, что рабочая неделя в календаре в этой CRM системе начинается с воскресенья. Все дело в том, что разработчики SugarCRM – американцы, а в Америке и Канаде неделя формально начинается как раз с воскресенья. Так что сегодня мы займемся изменением начала недели в календаре на привычный для нас понедельник.
А этих календаря два:
1) jscalendar, который используется в качестве всплывающего календаря в формах редактирования любого модуля
2) календарь одноименного модуля calendar
Необходимые изменения можно разбить на соответствующие два пункта:
1) Если у вас версия ранее 6.2 то продолжайте читать данный пункт. Если же у вас версия 6.2 и выше, то вам сюда.
В формах редактирования в качестве календаря используется javascript jscalendar. Папка с данным календарем находится в корне вашей CRM. Параметры локализации содержатся в папке lang данного модуля. Для начала недели с понедельника необходимо в файл jscalendar/lang /calendar-ru.js (если вы пользуетесь и английской версией, то и файл calendar-en.js) добавить следующую строчку:
Calendar._FD = 1;
FD — сокращение от First Day.
Результат:
2)Несколько сложнее обстоит дело с модулем календаря. К сожалению, разработчики не предоставили удобного параметра для настройки календаря.
Если у вас версия SugarCRM 6.2 или 6.3, то более корректные номера строк можно получить в соответствующей теме на форуме. Если у вас 6.0 то правильные номера строк приведены в данной статье.
Нам необходимо будет подправить два файла следующим образом.
Открываем файл modules/Calendar/Calendar.php и строку 186 изменяем на следующую:
$first_day_of_month = $this->date_time->get_day_by_index_this_month(-1);
Строку 202 в этом же файле изменяем на:
for($i=1;$i<$days_in_week+1;$i++)
Открываем файл modules/Calendar/DateTimeUtil.php.
Строку 536 изменяем на:
if ( $day_index < 0 || $day_index > 7 )
Данное решение для SugarCRM 6.0. Но будет работать и на версии 5.5, но, возможно, номера строк будут отличаться на пару позиций.
Готово! Теперь можно в очередной раз бежать к начальству за премией
Обновление от 6 сентября 2010.
Несколько полезных дополнений по данной теме:
1) Чтобы в режиме просмотра за неделю в шапке показывалась корректная дата, а не смещенная на один день, необходимо в файле modules/Calendar/templates/templates_calendar.php,
заменить строки (у меня 829-830 строка):
$first_day = $date_time->get_day_by_index_this_week(0); $last_day = $date_time->get_day_by_index_this_week(6);
на
$first_day = $date_time->get_day_by_index_this_week(1); $last_day = $date_time->get_day_by_index_this_week(7);
2) Чтобы в режиме просмотра за месяц и год были правильно подсвечены выходные, необходимо в modules/Calendar/templates/templates_calendar.php заменить строку 703 с данным содержанием
<td <?php if($j==0 || $j==6) { ?>class="weekEnd"<?php } ?>><?php template_cal_day_slice($args); ?></td>
на
<td <?php if($j==5 || $j==6) { ?>class="weekEnd"<?php } ?>><?php template_cal_day_slice($args); ?></td>
P.S. номера строк могут немного отличаться, ориентируйтесь по коду, а не по номерам.
UPDATE. 06 сентября 2011.
SugarCRM 6.2
В SugarCRM 6.2 разработчики отказались от js библиотеки jscalendar и используют средства встроенной YUI библиотеки. Поэтому открываем файл jssource/src_files/include/javascript/calendar.js и после строк:
calendar.cfg.setProperty('DATE_FIELD_DELIMITER', date_field_delimiter); calendar.cfg.setProperty('MDY_DAY_POSITION', dayPos+1); calendar.cfg.setProperty('MDY_MONTH_POSITION', monthPos+1); calendar.cfg.setProperty('MDY_YEAR_POSITION', yearPos+1);
добавляем строку
calendar.cfg.setProperty('START_WEEKDAY', 1);
После этого для обновления javascript, ОБЯЗАТЕЛЬНО в админке выбираем восстановление — Минимизация файлов Javascript.
Высказать своё мнение о статье Вы можете в комментариях, если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.
Проделал все требуемые и описанные изменения.
В 6ке сделать календарь не получилось. Sugar падает, когда я обращаюсь к ее календарику.
PS: но javascript-календарь теперь работает, как надо
Добрый день, Игорь.
Я проверил еще раз код, все отлично работает с SugarCRM 6 версии. Вышлите, пожалуйста, ваш измененный файл Calendar.php и DateTimeUtil.php мне на почту admin (собачка) sugartalk.ru, я проверю его.
Спасибо На 6.0.1 всё работает. А как поправить заголовок недели? В нем все по старому.
В файле modules/Calendar/templates/templates_calendar.php,
заменить строки (у меня 829-830 строка):
на
Все работает. Спасибо.
Вот бы еще в режиме просмотра месяца и года заливку поля «понедельник» перенести на поле «суббота»... *краснеющий смайлик*
Чтобы в режиме просмотра за месяц и год были правильно подсвечены выходные, необходимо в modules/Calendar/templates/templates_calendar.php
заменить строку 703 с данным содержанием
на :
Спасибо.
Всё работает.
На версии SugarCRM 5.5 тоже все работает.
Спасибо.
Подскажите пожалуйста, как можно сделать так, чтобы в просмотре года дни с запланированными действиями выделялись например жирным написанием.
Спасибо!
Все отлично работает. Спасибо!
Благодаря !
У меня SugarCRM CE 6.2.0. У нее в корне нет ни папки jscalendar, ни какой-либо другой папки с похожим названием. Файлов calendar-en.js, calendar-ru.js в системе тоже нет нигде.Подскажите, пожалуйста, где же мне искать этот календарь в версии 6.2.
Ваши вопросы задавайте в соответствующей теме на форуме(ссылка в конце статьи).
В комментариях вопросы больше не принимаются.
Обновил статью, ответ на ваш вопрос здесь
Спасибо. Теперь на 6.2 все работает.