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

Баг при добавление элемента OnAfterIBlockElementAdd

00 голосов
6
Здравствуйте встретил баг, проявляется когда загружаешь через импорт данные.Отлавливаю OnAfterIBlockElementAdd вывожу данные в итоге вижу что IBLOCK_SECTION_ID отсутствует.  На самом деле он существует и если посмотреть в секцию этот элемент действительно добавлен в секцию. Так куда же девается  IBLOCK_SECTION_ID ?
Код
Array(
    [ID] => 2416
    [~ID] => 2416
    [TIMESTAMP_X] => 29.01.2012 21:11:41
    [~TIMESTAMP_X] => 29.01.2012 21:11:41
    [TIMESTAMP_X_UNIX] => 1327857101
    [~TIMESTAMP_X_UNIX] => 1327857101
    [MODIFIED_BY] => 1
    [~MODIFIED_BY] => 1
    [DATE_CREATE] => 29.01.2012 21:11:41
    [~DATE_CREATE] => 29.01.2012 21:11:41
    [DATE_CREATE_UNIX] => 1327857101
    [~DATE_CREATE_UNIX] => 1327857101
    [CREATED_BY] => 1
    [~CREATED_BY] => 1
    [IBLOCK_ID] => 11
    [~IBLOCK_ID] => 11 

 [IBLOCK_SECTION_ID] => ГДЕ ОН ? [~IBLOCK_SECTION_ID] => ГДЕ ОН ? 
    [ACTIVE] => Y
    [~ACTIVE] => Y
    [ACTIVE_FROM] => 
    [~ACTIVE_FROM] => 
    [ACTIVE_TO] => 
    [~ACTIVE_TO] => 
   
)

Сам код в init.php


Код
  function ElementAddHandler(&$arFields){      
Код
echo "<pre>"; print_r($arFields); echo "</pre>";
      exit();
 }   
Через обычное добавление ( не важно админка это или публичная всё нормально). Проявляется исключительно при импорте данных через CSV файл в любой инфоблок.  
При этом в секция к примеру Наши баги существует в инфоблоке.
Сюда же OnBeforeIBlockElementUpdate та же ошибка!Сюда же OnBeforeIBlockElementAdd та же ошибка! 

Получается что отловить ID секции элемента нельзя. А это очень печально, хотя в $arFields переменная  IBLOCK_SECTION_ID    существует но пустая.
спросил 10 Сен, 13 от Viens (120 баллов)

6 Ответы

00 голосов
Сталкивался с подобным при отправке письма на добавление вопроса на корп портале, надо было в зависимости от раздела отправлять на разные адреса. В итоге получил ид раздела как $arFields["IBLOCK_SECTION"][0] (это на самом деле массив)...
ответил 10 Сен, 13 от Nevels (280 баллов)
00 голосов
Да он вобще у меня пуст т.е. никаких даже похожестей содержания элементов массива  $arFields["IBLOCK_SECTION"][0]. $arFields["IBLOCK_SECTION"] - без массивности. пустой причём. Даже в обновлений не отдаёт массивность. 
ответил 06 Дек, 13 от Viens (120 баллов)
00 голосов
Все дело в том, что секции элементу могут назначаться напрямую через метод CIBlockElement::SetElementSection() (что при csv-импорте и делается), а там никаких событий нет, и вот это действительно проблема. Надо бы попросить разработчиков добавить событие в CIBlockElement::SetElementSection()
ответил 19 Март, 14 от Delp (7,220 баллов)
00 голосов
Я сегодня весь день переписываюсь. Никаких внятных ответов как можно достичь этого не было предоставлено. Кроме как что вначале добавляются все элементы а потом идёт привязка к разделам  SetElementSection который тоже ничего не возвращает и не вызывает событие никакое. Вобщем тупик а проделанно столько работы , проекту оставалось только загрузить CSV и назначить элементам "коде". И всё приехали. Хоть бери всё ломай и думай как делать по другому из-за одного какого-то свойства и не правильного порядка обработки импорта. Прям душу разрывает.
По поводу события написал ну думаю ждать обновления или ещё что-то как минимум нужно ещё месяц меня заказчик просто убъёт. Эх..Достаточно было бы сделать update элемента после SetElementSection или же его модифицировать и повесить на него Update(сейчас наверное происходит прямое обновление записи БД) и тогда можно было бы вытащить что угодно но увы-увы.
ответил 10 Июль, 14 от BeCool (420 баллов)
00 голосов
Цитата
slipspim пишет:
По поводу события написал ну думаю ждать обновления или ещё что-то как минимум нужно ещё месяц

Из опыта - это очень оптимистичные прогнозы ))

В качестве выхода из ситуации могу лишь посоветовать сделать свою копию скрипта импорта, доработать его напильником и добавить в меню админки (здесь вам может пригодиться событие модуля main OnBuildGlobalMenu). В один рабочий можно уложиться.
ответил 10 Ноя, 14 от Delp (7,220 баллов)
00 голосов
Да этот вариант я думал оставить на последок. Ну видимо предётся отказаться от битрикса и сделать всё на другой CMS. Уж больно много костылей приходиться детать. Как бы в один прекрасный день не сломалось всё к ... матери.
ответил 08 Март, 15 от BeCool (420 баллов)

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

0 голосов
2 ответов
спросил 29 Апр, 14 от Canon (260 баллов)
0 голосов
3 ответов
0 голосов
3 ответов
0 голосов
1 ответ
0 голосов
5 ответов
спросил 20 Ноя, 13 от xARCHx (240 баллов)