Как показать всплывающую форму при возникновении определенного события в Битрикс24?

Как сделать так, чтобы popup форма с полями, без возможности закрытия при незаполненных обязательных полях, отображалась при срабатывании события "OnAfterTMDayStart" и вызывалась при выполнении функции "OpenDayEventHandler"? Какие изменения и дополнения следует внести в код, чтобы это работало?
  • 23 ноября 2023 г. 11:39
Ответы на вопрос 2
Для реализации данной функциональности вам понадобится следующий код:

1. В файле /bitrix/php_interface/init.php добавьте следующий код:
```php
use Bitrix\Main\Page\Asset;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'timeman',
    'OnAfterTMDayStart',
    function () {
        Asset::getInstance()->addString('<script src="/path/to/your/script.js"></script>');
    }
);
```
2. В файле /path/to/your/script.js добавьте следующий код:
```javascript
BX.ready(function () {
    function OpenDayEventHandler() {
        // Проверка обязательных полей
        var fieldsFilled = true;
        // Здесь нужно проверить все обязательные поля формы и установить fieldsFilled в false, если хотя бы одно поле не заполнено
        
        if (!fieldsFilled) {
            var popup = BX.PopupWindowManager.create(
                'my-popup',
                null,
                {
                    content: '<div style="padding: 10px;">Заполните все обязательные поля</div>',
                    closeIcon: false,
                    autoHide: true
                }
            );
            popup.show();
        }
    }
    
    OpenDayEventHandler();
});
```

Обратите внимание на комментарий в коде, где нужно проверить все обязательные поля формы и установить переменную fieldsFilled в false, если хотя бы одно поле не заполнено. Вам нужно будет заменить эту часть кода на свою логику проверки полей.

Также учтите, что путь "/path/to/your/script.js" в коде init.php должен быть заменен на путь к вашему скрипту, который будет вызываться при срабатывании события "OnAfterTMDayStart".
У вас есть браузер и сервер. Если происходит событие на сервере, то необходимо сохранить это состояние. Лучшим вариантом будет использовать базу данных (БД). Если у вас есть свой кастомный модуль, вы можете сохранить это событие в общую таблицу с настройками модулей или создать новую таблицу при помощи HL Блока. Чтобы вставить форму, рекомендуется использовать событие OnEndBufferContent. Вы можете перехватить контент и вставить JS код после тега . В этом событии можно проверить условие из таблицы и принять решение о вставке формы.
Похожие вопросы