Рейтинг: 16.3412  
На голосовании
Предложил Пользователь 144341 28.01.2019 09:04:48

JavaScript-обработчики событий в форме заказа (BX.onCustomEvent)

В форме заказа сайта (sale.order.ajax) необходимы JavaScript-обработчики событий для реализации дополнительных действий. Часто возникает необходимость выполнять доп. методы  при определенных действиях. Например:
  • при выборе точек самовывоза.
  • при нажатии кнопки "Далее в том или ином блоке.
В данный момент для этого приходится вмешиваться в код шаблона. Использование обработчиков событий миновало "костыли".

Кроме того, наличие этих обработчиков позволило бы реализовать ряд тиражных модулей.
Рейтинг: 6.451  
Новая
Предложил Пользователь 39858 08.10.2018 21:26:00

OnBeforeTaskNotificationSend - недостаточно данных

Данных в событии не хватает для нормальной обработки.
В случае, если стреляет событие на добавление комментария или даже апдейт задачи - в обработчике не имеем даже ID задачи, не говоря про остальное.
В то же время выше вызова обработчиков событий имеем массив $message, в котором имеется вся необходимая информация и даже больше. Только вот в событие отправляется только куцая и местами бесполезная его часть.

Желательно отправлять в обработчик сам $message, а не $message['EVENT_DATA'].

Схожая идея пятилетней давности - Добавить ID задачи в событие OnBeforeTaskNotificationSend
Рейтинг: 2.9729  
На голосовании
Предложил Пользователь 88641 30.07.2015 11:40:14

Добавить обработку событий в шаг "deactivate", модуль catalog.import.1c

Нужно событие, которое действительно "Финальное" в обмене с 1с. И это событие происходит после деактивации.

//Final step
elseif ($_GET["mode"]=="deactivate")
...
      foreach (GetModuleEvents("catalog", "OnFinalDeactivateCatalogImport1C", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($arParams));
      }
Рейтинг: 6.5302  
На голосовании
Предложил Пользователь 109495 29.01.2015 09:05:26

Автоматическое подключение обработчиков событий (D7-style)

У нас в веб-студии есть определененный стандарт: все обработчики хранятся в модулях в папке lib/eventhandlers/<код модуля, чье событие обрабатывается>.php
Внутри - класс с методами, чьи имена совпадают с названиями событий. Т.е. для события onBeforeUserLogin модуля main обработчик будет такой:
\Intervolga\Diving\EventHandlers\Main :: onBeforeUserLogin

Ситуацию усложняет только необходимость подключения этих обработчиков в include.php файле модуля.

Ничего не напоминает? Когда-то у нас была куча include'ов обычных классов и появился спситель - автозагрузчик D7. Может, сделаете аналогичную автозагрузку обработчиков событий?
Рейтинг: 4.2919  
На голосовании
Предложил Пользователь 139032 28.08.2014 11:10:03

Добавить событие, срабатывающее после создания бэкапа

Имеется ввиду что-то типа OnAfterBackupCreate. Данное событие было бы полезно для разработчиков, чтобы отследить, например, делался ли когда-то бэкап (если он в последствии был удален), или при автоматическом резервном копировании совершать какие-либо действия после создания бэкапа, например отсылать на почту уведомления или что-то подобное
Рейтинг: 2.2341  
На голосовании
Предложил Пользователь 105375 14.03.2014 14:01:12

Привести обработчик события OnBeforeIBlockElementUpdate к единому виду

При обновлении из списка элементов и из страницы редактирования элемента пользовательские свойства имеют разный формат.

Например, свойство типа "Список".
Со списка передается
array(
0 => "",
1 => SOME_VALUE,
)
а со страницы редактирования элемента
array(
0 => array(
     "VALUE" => SOME_VALUE ,
)
)

При отсутствии значения в первом случае передается
array(
0 => "",
)
Во втором ничего не передается.

Очень трудно под эту логику навесить свою логику. :)
Рейтинг: 11.7444  
На голосовании
Предложил Пользователь 109495 26.06.2013 11:55:38

Список активных обработчиков событий

Хотелось бы, чтобы в админке появилась такая чудесная страница, которая показывала бы отчет по обработчикам событий. Под отчетом я понимаю:
1 Тип события
2 Модуль, к которому относится событие
3 Список обработчиков событий (в том порядке, в котором будут вызываться)
3.1 Название класса и метода/функции-обработчика
3.2 Расположение класса и метода/функции-обработчика (полный путь к файлу, номер строки)
3.3 Признак системности (установлен модулем или разработчиком в init.php)
Рейтинг: 9.4245  
Новая
Предложил Пользователь 32566 03.03.2013 13:58:47

Добавить возможность запрета отправки письма по OnBeforeEventSend

В файле /bitrix/modules/main/classes/general/event.php:227 заменить это
$events = GetModuleEvents("main", "OnBeforeEventSend");
while ($event = $events->Fetch())
   ExecuteModuleEventEx($event, array(&$arFields, &$db_mail_result_array)); 
вот на это
$events = GetModuleEvents("main", "OnBeforeEventSend");
while ($event = $events->Fetch())
   if(ExecuteModuleEventEx($event, array(&$arFields, &$db_mail_result_array)) === false)
      return "F"; // Fail 
Такое решение даст возможность через обработчик OnBeforeEventSend запрещать отправку  писем определенных почтовых событий при определенных условиях, заданных разработчиком.
Рейтинг: 39.7713  
Новая
Предложил Пользователь 14686 16.05.2012 13:00:56

Добавить обработчики событий подключения файла init.php

Необходимо добавить два обработчика событий:
OnBeforeIncludeInitPHP
OnAfterIncludeInitPHP
Они должны вызываться для всех существующих init.php: общего и сайто-зависимых.

Зачем это необходимо
добавление кода в init.php может преследовать две цели:

1. Добиться подключения кода на каждом хите т.е. расширение его области видимости. С последующим вызовом из произвольного места на сайте. Т.е. подключение кода и его вызов разнесены во времени исполнения страницы.

2.  Добиться подключения кода и его работы непосредственно сразу после подключения.

В обоих случаях код добавляют руками. Если необходимо раздавать код,  который работает по принципу 2 (подключили и тут же запустили) через маркетплейс, то это становится трудоёмкой задачей. Нужно писать инструкцию.

Пример такого кода -  класс для логирования. Он обслуживает код, который уже исполняется в init.php, а обработчики событий ещё не начали работу. Посмотрите на порядок выполнения страницы.

В маркетплейсе появились решения которые уже дописывают свой код в хвост init.php я считаю, что обработчики решат эту проблему.

Добавлять строчку в шапку init.php с вызовом CModule::IncludeModule('MyModule');
Руками разработчика или скриптом считаю не очень хорошей идеей.