Уже на нескольких проектах видел, что контент-менеджеры не заполняют символьный код свойства.
В итоге сделал обработчик событий
Надеюсь пригодиться еще кому
В итоге сделал обработчик событий
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); } } |