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

Свойства элемента в уведомлении на ящик

00 голосов
6
Создал на сайте форму для добавления вопросов, через информационный блок в Битриксе, используя компонент bitrix:iblock.element.add.
Т.е. пользователь заполняет форму, в ИБ создается элемент не активный и на ящик приходит уведомление.

В init.php прописал такой код

// регистрируем обработчик
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyClass", "OnAfterIBlockElementAddHandler"));

class MyClass
{
    // создаем обработчик события "OnAfterIBlockElementAdd"
    function OnAfterIBlockElementAddHandler(&$arFields)
    {
  if ($arFields["IBLOCK_ID"] == 10)
{  $arIBlockElement = GetIBlockElement($arFields["ID"]);
$arSend = array('TEXT' =>
'Имя: '.$arFields['NAME'].'<br/>
E-mail: '.$arIBlockElement['PROPERTIES']['email']['VALUE'].'<br/>
Вопрос: '.$arFields['PREVIEW_TEXT']);


    CEvent::Send('QUEST_DOBAV',SITE_ID,$arSend);

  }

    }

}

На ящик приходит уведомление где заполнены поля Имя и Вопрос, а вот e-mail - пустое.
Причем если в настройках компонента bitrix:iblock.element.add поставить в параметре "Деактивировать элемент после сохранения:" нет, то поле email в уведомлении будет заполнено, если поставить значение "любой" или "только новый" - значение поля будет пустое.
спросил 28 Апр, 13 от Nistelroy (120 баллов)

6 Ответы

00 голосов
Попробуйте вместо функции GetIBlockElement использовать соответвующие методы, т.к. функция устарела
----
CIBlockElement::GetList()
_CIBElement::GetProperties
_CIBElement::GetFields

Код
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockElementAddHandler"); 

func tion OnAfterIBlockElementAddHandler(&$arFields) 
{
      if ($arFields["IBLOCK_ID"] == 10)
      {
         $rs = CIBlockElement::GetList(array(), array("ID"=>$arFields["ID"]), false, array("nTopCount"=>1));
         if($obRes = $rs->GetNextElement())
         {
            $arRes = $obRes->GetFields();
            $arRes["PROPERTIES"] = $obRes->GetProperties();
            // .....
         }
   }
}
 
ответил 28 Апр, 13 от Run (1,300 баллов)
00 голосов
Та же история.
методы 
CIBlockElement::GetList()
_CIBElement::GetProperties
_CIBElement::GetFields

не помогают.


значения свойств не возвращаются (причем поля возвращаются).
видимо со свойствами есть загвоздки когда их начинает "видеть" битрикс
т.е. поля видит, а свойства нет.даже массив &$arFields почему-то не содержит свойства в событии OnAfterIBlockElementAdd

Array
(
[MODIFIED_BY] => 1
[IBLOCK_ID] => 23
[TMP_ID] => bc0e57bec3sdfgsadfrgc296e14a437d32a
[XML_ID] => 34832
[NAME] => вещи по реестру 
[ACTIVE] => Y
[SEARCHABLE_CONTENT] => ВЕЩИ ПО РЕЕСТРУ 
[CREATED_BY] => 1
[~DATE_CREATE] => now()
[~TIMESTAMP_X] => now()
[ID] => 1906998
[RESULT] => 1906998
)
ответил 29 Апр, 13 от nina (180 баллов)
00 голосов
Попробуйте

Код
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyClass", "OnAfterIBlockElementAddHandler")); 
class MyClass {
   function OnAfterIBlockElementAddHandler(&$arFields) {
      log_write($arFields["ID"]);
      if ($arFields["IBLOCK_ID"] == 10)  {
         $EMail = "";
         $resProp = CIBlockElement::GetProperty(12, $arFields["ID"], array("SORT"=>"ASC"), array("CODE"=>"EMAIL"));
         if ($arProp = $resProp->GetNext()) {
            $EMail = $arProp["VALUE"];
         }
         $arSend = array(
            'TEXT' =>  'Имя: '.$arFields['NAME'].'<br/> 
                              E-mail: '.$EMail.'<br/> 
                              Вопрос: '.$arFields['PREVIEW_TEXT']
         );
         CEvent::Send('QUEST_DOBAV', SITE_ID, $arSend); 
      }
   }
}
 
ответил 27 Июнь, 13 от SleepLess (1,220 баллов)
00 голосов
$resProp = CIBlockElement::GetProperty(12, $arFields["ID"], array("SORT"=>"ASC"), array("CODE"=>"EMAIL"));

Конкретно пробовал вот эту фишку сам - не помогло.


Дело в том что я пользуюсь обработчиком в двух случаях: при ручном добавлении элемента в ИБ через админку
и через импорт CSV.
Так вот при ручном добавлении все ОК.
А вот при импорте вообще не работает - не видит свойства в событии и всё тут.

Уже думаю лезть править скрипт импорта

/home/b/bx592/katalog24.ru/public_htmlРисунокbitrixРисунокmodulesРисунокcatalogРисунокload_importРисунокcsv_new_run.php



но это все-таки системный файл - считаю это излишним.
ответил 01 Окт, 13 от nina (180 баллов)
00 голосов
Так если через импорт не видит, попробуйте в этом же блоке кода подключить модуль (можно на одном уровне с $arFields["IBLOCK_ID"] == 10): 

Код
 if (CModule::IncludeModule("iblock")) {   
   ...
}
ответил 01 Янв, 14 от SleepLess (1,220 баллов)
00 голосов
Цитата
Денис Сон пишет:
Так если через импорт не видит, попробуйте в этом же блоке кода подключить модуль (можно на одном уровне с $arFields["IBLOCK_ID"] == 10 ):
Код
  if (CModule::IncludeModule("iblock")) {   
   ...
} 
Функция то срабатывает, поэтому подключение модуля тут не причем.
сами свойства элемента еще не определены на момент срабатывания события,
т.е. при импорте свойства заполняются уже после добавления элемента в ИБ.
ответил 17 Апр, 14 от nina (180 баллов)

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

0 голосов
2 ответов
0 голосов
4 ответов
0 голосов
2 ответов
0 голосов
3 ответов
спросил 14 Фев, 14 от Hall (100 баллов)