@chistij
Frontend Developer

Вывести popup форму по событию в Битрикс24?

Добрый день, коллеги.

Суть задачи в том, что необходимо, по событию "OnAfterTMDayStart", при соблюдении определенных условий, выводить popup форму с полями, без возможности закрытия данной формы, если обязательные поля не будут заполнены.

Для решения этой задачи, подписываюсь на данное событие:

AddEventHandler("timeman", "OnAfterTMDayStart", "OpenDayEventHandler");


Далее, необходимо разобраться с самой формой.

Нашел, что данную форму можно делать с помощью:

<?php
defined('B_PROLOG_INCLUDED') || die;
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("PopUp");
   CJSCore::Init(array("popup"));

?>


<div id="hideBlock" style="display:none;">
   <h1>Hello</h1>
   <p>text</p>
</div>

<script>


   window.BXDEBUG = true;

BX.ready(function(){
   var oPopup = new BX.PopupWindow('timemanager_popup', window.body, {
      autoHide : true,
      offsetTop : 1,
      offsetLeft : 0,
      lightShadow : true,
      closeIcon : false,
      closeByEsc : false,
      overlay: {
         backgroundColor: 'red', opacity: '80'
      }
   });

   oPopup.setContent(BX('hideBlock'));
   BX.bindDelegate(
      document.body, 'click', {className: 'css_popup' },
         BX.proxy(function(e){
            if(!e)
               e = window.event;
            oPopup.show();
            return BX.PreventDefault(e);
         }, oPopup)
   );
   
   
});
</script>

<div class="css_popup">click Me</div>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>


Подскажите, пожалуйста, можно ли так сделать и куда стоит копать, чтобы данная форма выводилась в результате функции "OpenDayEventHandler", которая срабатывает при наступлении моего события?
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 1
@ermolaev_nikita
Ну смотрите, у вас есть браузер и сервер. Если событие наступило на сервере, то это состояние нужно куда-то сохранить, лучше всего это сделать в БД, если у вас свой кастомный модуль, то вы можете сохранить это событие в общую таблицу с настройками модулей или создать таблицу, например через HL Блок.

Для вставки формы я бы лучше использовал событие OnEndBufferContent, перехватывал бы контент и вставлял JS после тэга
</body>
к примеру. Ну и в этом событии можно проверять условие из таблицы и принимать решение о вставке формы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы