@den-masonov

После изменения символьного кода в обработчике события OnBeforeIBlockElementAdd символьный код не проверяется на уникальность. Куда копать?

AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("CustomFields", "OnBeforeIBlockElementAddHandler"));
class CustomFields
{ 
// создаем обработчик события "OnBeforeIBlockElementAdd" 
	function OnBeforeIBlockElementAddHandler(&$arFields) 
	{
      $arFields["CODE"] = $arFields["CODE"]."_".date('dmY'); 
      return;
	}
}


Вот собственно код из доки битрикса. Все меняется и сохраняется как нужно, только валидатор не работает теперь
  • Вопрос задан
  • 1516 просмотров
Решения вопроса 1
@Koen777
DeveloperGeorg
Всё верно, проверка символьного кода элемента инфоблока происходит до событий OnBeforeIBlockElementAdd или OnBeforeIBlockElementUpdate. Это происходит в bitrix/modules/iblock/classes/general/iblockelement.php (с 4128 строки по 4149)
Если вы хотите изменить символьный код до, то используйте событие OnStartIBlockElementAdd)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Ifelseapps
@Ifelseapps
Frontend developer/JavaScript developer
Подозреваю, что в обработчике валидацию Вам придется делать руками.
// делаем выборку элементов по новому символьному коду
// ...
if (//что-то нашлось) {
   $APPLICATION->ThrowException('Элемент с таким символьным кодом уже существует');
   return false;
}


Если хотите разобраться как сам Битрикс проверяет на уникальность, то откройте вкладку Network в браузере и нажмите на кнопку "Применить" в админке, посмотрите какой файл обрабатывает аякс-запрос, а дальше смотрите какие действия там выполняются.
Ответ написан
Комментировать
@DeclanBartowski
А в настройке инфоблока стоит что должна происходить проверка на уникальность?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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