Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Как встроить приложение в календарь CALENDAR_GRIDVIEW», проанализируем лучшие практики и покажем, как правильно использовать встроить приложение в реальных задачах.
Как встроить приложение в календарь CALENDAR_GRIDVIEW
В календарь можно встроить приложение. В верхней части календаря в списке видов отображения есть место для встройки CALENDAR_GRIDVIEW, куда можно добавить свой пункт.
Подробнее о виджете — в статье Виджет в календаре.
Как привязать приложение к календарю
Исспользуйте метод placement.bind, чтобы связать приложение с календарем. Параметры PLACEMENT, HANDLER и TITLE определяют, где и как будет отображаться ваше приложение.
- JS
try
{
const response = await $b24.callMethod(
'placement.bind',
{
PLACEMENT: 'CALENDAR_GRIDVIEW',
HANDLER: 'http://your_site/handler.php',
TITLE: 'Custom tab'
}
);
const result = response.getData().result;
console.log(result);
}
catch( error )
{
console.error('Error:', error);
}- PHP
try {
$response = $b24Service
->core
->call(
'placement.bind',
[
'PLACEMENT' => 'CALENDAR_GRIDVIEW',
'HANDLER' => 'http://your_site/handler.php',
'TITLE' => 'Custom tab',
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error binding placement: ' . $e->getMessage();
}- BX24.js
BX24.callMethod(
'placement.bind',
{
PLACEMENT:'CALENDAR_GRIDVIEW',
HANDLER: 'http://your_site/handler.php',
TITLE: 'Custom tab'
},
(result) => {console.log(result)}
);Если в приложении вывести все параметры, которые передаются в запросе к приложению:
- PHP CRest
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";Можно увидеть, что передаются определенные параметры, например диапазон дат, который отображается в календаре:
- PHP CRest
[PLACEMENT_OPTIONS] => {
"viewRangeFrom":"2018-09-30",
"viewRangeTo":"2018-11-04"
}Эти параметры можно использовать для настройки отображения вашего приложения.
JS методы
Получить события
Метод getEvents получает события календаря.
- JS
try
{
const dateFrom = new Date();
const dateTo = new Date(dateFrom.getTime() + 86400 * 30 * 1000); // Умножаем на 1000, чтобы преобразовать секунды в миллисекунды
dateFrom.setHours(0, 0, 0, 0);
dateTo.setHours(0, 0, 0, 0);
const response = await $b24.callMethod(
'placement.getEvents',
{
dateFrom: dateFrom,
dateTo: dateTo
}
);
const events = response.getData().result;
console.log('getEvents response:');
console.dir(events);
}
catch( error )
{
console.error('Error:', error);
}- PHP
try {
$dateFrom = new DateTime();
$dateTo = new DateTime($dateFrom->getTimestamp() + 86400 * 30 * 1000);
$dateFrom->setTime(0, 0, 0, 0);
$dateTo->setTime(0, 0, 0, 0);
$response = $b24Service
->placement
->call(
'getEvents',
[
'dateFrom' => $dateFrom,
'dateTo' => $dateTo
]
);
$events = $response
->getResponseData()
->getResult();
echo 'getEvents response:';
print_r($events);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error getting events: ' . $e->getMessage();
}- BX24.js
var dateFrom = new Date();
var dateTo = new Date(dateFrom.getTime() + 86400 * 30 * 1000); // Умножаем на 1000, чтобы преобразовать секунды в миллисекунды
dateFrom.setHours(0, 0, 0, 0);
dateTo.setHours(0, 0, 0, 0);
BX24.placement.call(
'getEvents',
{
dateFrom: dateFrom,
dateTo: dateTo
},
function(events) {
console.log('getEvents response:');
console.dir(events);
}
);Открыть карточку и просмотреть событие
Метод viewEvent открывает карточку для просмотра события.
- JS
try
{
const response = await $b24.callMethod(
'placement.call',
{
id: "1431170", // идентификатор события
dateFrom: "11.07.2018" // дата события. Не обязательна, но важна для регулярных событий
}
);
const result = response.getData().result;
}
catch( error )
{
console.error('Error:', error);
}- PHP
try {
$response = $b24Service
->placement
->call(
'viewEvent',
[
'id' => "1431170", // идентификатор события
'dateFrom' => "11.07.2018" // дата события. Не обязательна, но важна для регулярных событий
]
);
$result = $response
->getResponseData()
->getResult();
// Не требуется никакой логики обработки данных
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error calling viewEvent placement: ' . $e->getMessage();
}- BX24.js
BX24.placement.call(
'viewEvent',
{
id: "1431170", // идентификатор события
dateFrom: "11.07.2018" // дата события. Не обязательна, но важна для регулярных событий
},
function(){}
);Добавить новое событие
Метод addEvent открывает карточку для добавления нового события.
- JS
try
{
const response = await $b24.callMethod(
'placement.addEvent',
{}
);
const result = response.getData().result;
// Нужная вам логика обработки данных
}
catch( error )
{
console.error('Error:', error);
}- PHP
try {
$response = $b24Service
->placement
->call('addEvent', []);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error calling addEvent: ' . $e->getMessage();
}- BX24.js
BX24.placement.call(
'addEvent',
function(){}
);Обновить событие
Метод editEvent открывает карточку для редактирования события.
- JS
try
{
const response = await $b24.callMethod(
'placement.call',
{
placement: 'editEvent',
params: {
uid: "1431171|19.07.2018"
}
}
);
const result = response.getData().result;
}
catch( error )
{
console.error('Error:', error);
}- PHP
try {
$response = $b24Service
->placement
->call(
'editEvent',
[
'uid' => "1431171|19.07.2018"
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error calling editEvent placement: ' . $e->getMessage();
}- BX24.js
BX24.placement.call(
'editEvent',
{
uid: "1431171|19.07.2018"
},
function(){}
);Удалить событие
Метод deleteEvent удаляет событие.
- JS
try
{
const response = await $b24.callMethod(
'placement.deleteEvent',
{
id: "1431169"
}
);
const result = response.getData().result;
}
catch( error )
{
console.error('Error:', error);
}- PHP
try {
$response = $b24Service
->placement
->call(
'deleteEvent',
[
'id' => "1431169"
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error calling deleteEvent: ' . $e->getMessage();
}- BX24.js
BX24.placement.call(
'deleteEvent',
{
id: "1431169"
},
function(){}
);События
События, которые можно отслеживать в месте встройки:
| Событие | Описание |
|---|---|
Calendar.customView:refreshEntries | Обновление событий |
Calendar.customView:decreaseViewRangeDate | Нажатие на стрелочку назад, то есть открытие календаря за предыдущие даты |
Calendar.customView:increaseViewRangeDate | Нажатие на стрелочку вперед, то есть открытие календаря на следующие даты |
Calendar.customView:adjustToDate | Переход к конкретной дате |
- [](./index)
- [](../widgets/index)
- [](../widgets/calendar)
- [](../widgets/user-field/index)
- [](../../local-integrations/local-apps)
💡 Экспертное мнение и рекомендации
Советы эксперта по интеграции:
- Всегда используйте кэширование при частых запросах к встроить приложение, чтобы разгрузить базу данных.
- Соблюдайте стандарты PSR при написании обработчиков для «Как встроить приложение в календарь CALENDAR_GRIDVIEW».
- Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru