Не получилось найти готовых решений по кастомизации пришлось править основной js от самой системы. Постараюсь описать подробно, хотя наверняка был способ "лучше", "проще", "надежнее" и т.п.
В файле core_date.js (путь к файлу /bitrix/js/main/core/core_date.js)
В нем ищем "BX.calendar.ValueToString = function(value, bTime, bUTC)" возвращает выбранную в календаре дату в нужное нам поле например input
Исходный вариант:
Код |
---|
return BX.date.format(
BX.date.convertBitrixFormat(BX.message(bTime ? 'FORMAT_DATETIME' : 'FORMAT_DATE')),
value,
null,
!!bUTC
); |
Заменил на следующий
Код |
---|
var element = document.getElementById('freeze_form');
if(!element){
var selectdate = BX.date.format(
BX.date.convertBitrixFormat(BX.message(bTime ? 'FORMAT_DATETIME' : 'FORMAT_DATE')),
value,
null,
!!bUTC
);
return selectdate;
} else {
var today = new Date();
var todayformat = BX.date.format(
BX.date.convertBitrixFormat(BX.message(bTime ? 'FORMAT_DATETIME' : 'FORMAT_DATE')),
today,
null,
!!bUTC
);
var selectdate = BX.date.format(
BX.date.convertBitrixFormat(BX.message(bTime ? 'FORMAT_DATETIME' : 'FORMAT_DATE')),
value,
null,
!!bUTC
);
if (selectdate < todayformat) {
alert('Указанная дата меньше текущей. Будет указана сегодняшняя дата.');
return todayformat;
}
return selectdate;
} |
Где переменные:
element - элемент с определенным id на странице, чтобы мое ограничение по дате не мешало потом работе с календарем на других страницах в том числе и в админке.
selectdate - дата выбранная в окне календаря с форматированием
today - текущая дата.
todayformat - текущая дата после форматирования.
Логика работы следующая, если скрипт запущен на странице где есть элемент с id="
freeze_form", то при выводе выбранной в окне календаря даты мы ее сначала проверим на "старость", если она равна или больше текущей то подставляем ее в нужное нам поле, если нет то выдаем пользователю сообщение и подставляем текущую дату. А если у нас на странице нет элемента с нужным нам id то дата подставляется любая выбранная в календаре.