Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Обработчик работает со 2-го раза

00 голосов
4
Сделал обработчик на обновление товара в инфоблоке (OnAfterIBlockElementUpdate).
создал элемент, сохранил его.
при последующем открытии, заменяю количество в торговом каталоге, при нажатии на кнопку применить или сохранить - ничего не происходит в обработчике.
затем при повторном открытии сново нажимаю кнопку сохранить или применить, и на этот раз все работает. Почему так?

вот обработчик:

Код
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockElementUpdateHandler");

    function OnAfterIBlockElementUpdateHandler(&$arFields)
    {
            CModule::IncludeModule('catalog');
            global $APPLICATION;

              $product = CCatalogProduct::GetByID($arFields['ID']);
           $filename = '../../catalog/text.txt';
           $fd = fopen($filename, "r");
           $buf = fread($fd, 1024);
           fclose($fd);
           $bufer = unserialize($buf);
           if (array_key_exists($arFields['ID'], $bufer) && $product['QUANTITY']>0):
                 $email = $bufer[$arFields['ID']]['EMAIL'];
                 unset($bufer[$arFields['ID']]);
                 foreach($email as $key=>$value):
                    $arEvent = Array(
                       "EMAIL"=>$value,
                       "NAME"=>$arFields['NAME']
                    );
                     CEvent::Send("REQUEST", 's1', $arEvent);
              endforeach;
           endif;
           $fd = fopen($filename, "w");
           fwrite($fd, serialize($bufer));
           fclose($fd);
    }
спросил 15 Июль, 13 от Storitell (340 баллов)

4 Ответы

00 голосов
нашел причину)) все оказалось в искуственном импорте :D. создавал элменты через CIBlockElement::add($arField);
Видимо чего не учел для работы с торговым каталогом)
Подскажите как правильно в таких случаях создавать элементы?
ответил 15 Июль, 13 от Storitell (340 баллов)
00 голосов
что-то не понятно из ваших слов.

Обработчик у вас на событие OnAfterIBlockElementUpdate, которое срабатывает после CIBlockElement::Update

а функцию вы пользуете CIBlockElement::add, после этой функции генерируется событие OnAfterIBlockElementAdd.
ответил 04 Сен, 13 от Almarea (3,760 баллов)
00 голосов
Цитата
YakDm пишет:
Обработчик у вас на событие OnAfterIBlockElementUpdate, которое срабатывает после CIBlockElement::Update

а функцию вы пользуете CIBlockElement::add, после этой функции генерируется событие OnAfterIBlockElementAdd.


дело в следующем:
изначально я переносил данные с другого сайта (на другом движке), и чтобы добавить данные в инфоблок битрикса использовал метод CIBlockElement::add.

А потом мне понадобилось сделать обработчик (когда уже товар был в базе). суть обработчика следующая, когда количество товара в каталоге (на складе) изменяеться (приходить какое то поступление), то отправляеться письмо что данный товар поступил в продажу и формируеться по новой массив в файле).
Вот здесь с 1-го раза ничего не работало, а срабатывало со 2-го раза (тоесть 2 раза надо было нажать кнопку сохранить в редактировании элемента, чтобы отправилось письмо и т.д.).
Потом я понял то что дело все в этом переносе и создании только в "iblock", а ведь надо еще и в "catalog".
и вот потом еще спросил:

Цитата
Видимо чего не учел для работы с торговым каталогом)
Подскажите как правильно в таких случаях создавать элементы?
ответил 02 Дек, 13 от Storitell (340 баллов)
00 голосов
Тут я не советчик :D , к сожалению.
Но посмотрите, может нужно использовать и это?
ответил 14 Март, 14 от Almarea (3,760 баллов)

Похожие вопросы

0 голосов
9 ответов
0 голосов
5 ответов
0 голосов
1 ответ
0 голосов
2 ответов
спросил 03 Дек, 13 от XIDAN (620 баллов)
0 голосов
8 ответов
спросил 15 Июнь, 13 от Asteria (1,840 баллов)