Уже на нескольких проектах видел, что контент-менеджеры не заполняют символьный код свойства.
В итоге сделал обработчик событий
Надеюсь пригодиться еще кому 
В итоге сделал обработчик событий
function eventHandlersBeforeProperty(&$arFields){
if(strlen($arFields['CODE']) <= 0){
CModule::IncludeModule('iblock');
$params = Array(
"max_len" => "100", // обрезает символьный код до 100 символов
"change_case" => "U", // буквы преобразуются к нижнему регистру
"replace_space" => "_", // меняем пробелы на нижнее подчеркивание
"replace_other" => "_", // меняем левые символы на нижнее подчеркивание
"delete_repeat_replace" => "true", // удаляем повторяющиеся нижние подчеркивания
);
$bWhile = $bDouble = false;
do{
if(!$bWhile){
$arFields['CODE'] = CUtil::translit($arFields['NAME'], "ru", $params);
}
if($bWhile || strlen($arFields['CODE']) <= 0 || $bDouble){
$arFields['CODE'] = 'PROP_'.$arFields['IBLOCK_ID'].'_'.$arFields['ID'].'_'.randString(3, array("ABCDEFGHIJKLNMOPQRSTUVWXYZ", "0123456789"));
}
$rs = CIBlockProperty::Getlist(false, array('IBLOCK_ID' => $arFields['IBLOCK_ID'], 'CODE' => $arFields['CODE'], '!ID' => $arFields['ID']));
$bWhile = true;
}while($bDouble = (bool) $rs->Fetch() || strlen($arFields['CODE']) <= 0);
}
}
|

