Добрый день всем читателям. Сегодня мы затронем вопрос напоминаний в SugarCRM о звонке/встрече/задаче (в дальнейшем я буду называть это мероприятием), а конкретно займемся изменением значений минут даты начала (по умолчанию возможны только варианты 0, 15, 30, 45), а это для некоторых довольно неудобно и хотелось бы увеличить количество вариантов начала мероприятия. Точно так же вопрос обстоит с напоминанием. По умолчанию можно поставить напоминание только за 1, 5, 10, 15, 30, 60 минут.
Предлагаю сделать все с промежутками в 5 минут. Если вы захотите сделать другие промежутки времени, то вы без труда измените код, который я вам предлагаю.
Начнем сперва с более простой задачи в плане реализации. Изменим варианты времени напоминания мероприятия. Здесь все сделано грамотно, и разработчики дают четкие инструкции, как изменять варианты select значения в SugarCRM. Все значения select хранятся в $app_list_strings. Нам нужно изменить опцию reminder_time_options. Для любого редактирования опций необходимо добавить файл по пути custom/Extension/application/Ext/Language/language.Имя_файла.php . Где для русского языка language имеет значение ru_ru, для английского en_us. Имя файла — любое. Обычно если это значения для одного модуля, то принято давать и название из имени модуля.
Итак, создаем файл custom/Extension/application/Ext/Language/ru_ru.Meetings.php, где перечисляем нужные варианты (ключ массива — это значение в секундах, а значения элементов массивов — это строковая интерпретация количества времени, которая будет показана пользователю):
<?php $app_list_strings['reminder_time_options'] = array( 60 => 'за 1 минуту', 300 => 'за 5 минут', 600 => 'за 10 минут', 900 => 'за 15 минут', 1200 => 'за 20 минут', 1500 => 'за 25 минут', 1800 => 'за 30 минут', 2100 => 'за 35 минут', 2400 => 'за 40 минут', 2700 => 'за 45 минут', 3000 => 'за 50 минут', 3300 => 'за 55 минут', 3600 => 'за 1 час', ); ?>
Если необходимо, проделайте то же самое для английского языка, создав файл custom/Extension/application/Ext/Language/en_us.Meetings.php.
Теперь запускаем в администрировании быстрое восстановление и наблюдаем за результатом:
Также здесь необходимо помнить один нюанс: если вам необходимо время напоминания больше одного часа, то чтобы напоминание сработало, необходимо в этом же файле изменить параметр reminder_max_time на нужное. Например, мы добавили в нашу CRM вариант напоминания за два часа. Наш файл будет со следующим содержимым:
<?php $app_list_strings['reminder_time_options'] = array( 60 => 'за 1 минуту', 300 => 'за 5 минут', 600 => 'за 10 минут', 900 => 'за 15 минут', 1200 => 'за 20 минут', 1500 => 'за 25 минут', 1800 => 'за 30 минут', 2100 => 'за 35 минут', 2400 => 'за 40 минут', 2700 => 'за 45 минут', 3000 => 'за 50 минут', 3300 => 'за 55 минут', 3600 => 'за 1 час', 7200 => 'за 2 часа', ); $app_list_strings['reminder_max_time']=7200; ?>
Теперь приступим к изменению вариантов времени начала мероприятия. Так просто изменить данные варианты в CRM не получится. Дело в том, что это специальное поле SugarCRM типа Datetimecombo. И за его отображение отвечает отдельный шаблон smarty. Но изменять шаблон этого поля нам не потребуется. А достаточно будет изменить javascript файл, относящийся к полю данного типа. Отрываем файл jssource/src_files/include/SugarFields/Fields/Datetimecombo/Datetimecombo.js. Здесь будут происходить все наши изменения.
Во первых изменяем (у меня это строки 70-80):
//A safety scan to make sure hrs and minutes are formatted correctly if (this.mins > 0 && this.mins < 15) { this.mins = 15; } else if (this.mins > 15 && this.mins < 30) { this.mins = 30; } else if (this.mins > 30 && this.mins < 45) { this.mins = 45; } else if (this.mins > 45) { this.hrs += 1; this.mins = 0; } //if-else
на
if (this.mins > 0 && this.mins < 55) { for (var i=0; i<=50; i=i+5){ if (this.mins > i && this.mins < i+5 ) { this.mins = i + 5; } } } else if (this.mins > 55) { this.hrs += 1; this.mins = 0; } //if-else
И само изменение вариантов селекта date_start_minutes.
Изменим данный код
text += '\n<option value="00" ' + (this.mins == 0 ? "SELECTED" : "") + '>00</option>'; text += '\n<option value="15" ' + (this.mins == 15 ? "SELECTED" : "") + '>15</option>'; text += '\n<option value="30" ' + (this.mins == 30 ? "SELECTED" : "") + '>30</option>'; text += '\n<option value="45" ' + (this.mins == 45 ? "SELECTED" : "") + '>45</option>';
На более грамотный короткий аналог.
for (i=0; i<=55; i=i+5){ val = i < 10 ? "0" + i : i; text += '\n<option value="' + val + '" ' + (this.mins == i ? "SELECTED" : "") + '>' + val + '</option>'; }
Третий параметр в цикле — это шаг в минутах. Если вам надо, допустим, сделать возможность выбора каждой минуты, просто замените 5 на 1, каждой десятой — замените 5 на 10 и т.д.
Теперь необходимо обязательно сделать замену оригинального javascript файла нашим. Для этого переходим в SugarCRM — администрирование — восстановление — минимизация файлов Javascript.
Если вдруг вы изменяли сжатые javascript файлы, то можете просто скопировать данный файл с заменой в include/SugarFields/Fields/Datetimecombo.
Проверяем наш результат.
Если же вам неохота вносить изменения и разбираться, что к чему, то для самых ленивых по данной ссылке вы можете скачать измененную версию данного файла (для SugarCRM 6), которую достаточно скопировать в include/SugarFields/Fields/Datetimecombo/ Datetimecombo.js.
До новых встреч и удачи в освоении CRM
Высказать своё мнение о статье Вы можете в комментариях, если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.
Спасибо за статью, интересная и полезная касательно изменений параметров начала встречи.
Для конфигураии параметров функции напоминаний в SugarCRM это не актуально, т.к. они изменяются намного проще, через студию, dropdown editor. Необходимо просто изменить, удалить или добавить новые значения в соответствующий список.
Конкретно, для параметров функции напоминаний необходимо отредактировать dropdown list с названием «reminder_time_options».
С уважением,
Александр.
Добрый день, Александр.
Спасибо за комментарий, я прекрасно знаю, что такое SugarCRM студия, но:
1) Для меня проще делать некоторые вещи «руками», т.к. я всегда контролирую, какие файлы меняю, и всегда могу заливать изменения в рабочую версию, а не дублировать действия в студии на сервере, или же искать, какие файлы SugarCRM студия изменила.
2) Я думаю, разработчикам полезно будет знать, что реально происходит внутри, а не просто кликать в студии на кнопки.
3) Через студию никак нельзя изменить варианты времени начала мероприятия.
Полностью согласен:)
Просто, я думаю, что будет неплохо дополнить статью информацией о том, что можно делать через студию. Ведь не все читатели данного ресурса разработчики и умеют или хотят лезть в код, особенно если есть возможность достичь необходимого в самой студии.
С уважением,
Александр.
Добрый день!
Касательно изменения даты напоминания:
Создал файл и написал код:
Затем выполнилд быстрое восстановление, но варианты так и не появились...
Версия 5,5,2
Могу предположить возможные три варианта:
1) Вы неправильно назвали соответствующую опцию: необходимо $app_list_strings['reminder_time_options'];
2) Вы поместили данный языковой не в нужную папку, и файл автоматически не подключается;
3) Попробуйте почистить языковой кеш SugarCRM в ручном режиме. В папке cache/modules/Meetings удалите папку language.
1. Код копировал, + провели. все верно
2. Размещен верно: custom/Extension/application/Ext/Language. Имя файла ru_ru.Meetings.php
3. Удалил. Без результатно.
Проверил все по 3 раза не пойму в чем проблема...
Если у вас не получается отредактировать combobox в ручном режиме, воспользуйтесь визуальным режимом.
В SugarCRM перейдите в пункт Администрирование -> редактор комбобокса -> reminder_time_options и отредактируйте записи так как вам необходимо.
так уже и сделал, но все время которое больше часа просто напросто не уведомляет пользователя...
Здравствуйте в очередной раз. Хочу выразить вам благодарность за ваши статьи. Они оказались очень и очень занимательными и полезными. Я довольно за короткий срок разобрался с чередой немаловажных вопросов.
И вот на ряду еще один: как правильно работать с javascript? В смысле, как правильно его использовать (где описывать свои пользовательские функции, где подключать и т.д.) для создания своих зависимых полей, например, связанных , checkbox с text и т.д.
Большое спасибо!
З.Ы. Если пишу не там где положено, приношу свои извинения.
Вставочка в текст: «связанных dropdawn листов»