Блог Горошко Андрея Bitrix24 Как встроить приложение в календарь CALENDAR_GRIDVIEW

Как встроить приложение в календарь CALENDAR_GRIDVIEW

Каждый 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 и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Очистка от дубликатов и наведение порядка в базе контактов Битрикс24Очистка от дубликатов и наведение порядка в базе контактов Битрикс24

Профессиональная настройка и внедрение Битрикс24 CRM позволяет систематизировать работу отдела продаж, исключить потерю лидов и автоматизировать ключевые бизнес-процессы компании. Услуга «Очистка от дубликатов и наведение порядка в базе контактов Битрикс24»

Удалить статус sale.status.deleteУдалить статус sale.status.delete

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Удалить статус sale.status.delete». Вы узнаете экспертные методики работы с sale.status.delete и научитесь избегать

Изменить владельца группы sonet_group.setownerИзменить владельца группы sonet_group.setowner

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Изменить владельца группы sonet_group.setowner». Вы узнаете экспертные методики работы с изменить владельца и