<?
//генерация символьных кодов в битриксе
//https://dev.1c-bitrix.ru/community/webdev/user/30522/blog/6794/ - оригинальная статья
if(!CModule::IncludeModule("iblock"))
{
echo "Error with iblock module!";
die;
}
$arParams['IBLOCK_ID'] = 28; //id инфоблока
$arParams['LIST_CNT'] = 50; //количество элементов для генерации
$arParams['TYPE_WORK'] = 'element'; // {section | element} указываем для кого генерировать код
$arOrder = array(
"sort" => "inc",
);
$arFilter = array(
"IBLOCK_ID" => $arParams['IBLOCK_ID'],
"IBLOCK_LID" => "s1" //имя сайта
//"CODE" => "",
//"CODE" => false
);
$arTransParams = array( //(максимальная длина кода,регистр(нижний,верхний,не менять),
//заменять пробел на...,остальные символы менять на...,удалять лишние символы замены)
"max_len" => 100,
"change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change
"replace_space" => '-',
"replace_other" => '-',
"delete_repeat_replace" => true
);
if($arParams['TYPE_WORK'] == 'section'){//для разделов
$db_elemens = CIBlockSection::GetList($arOrder, $arFilter, false);
$db_elemens->NavStart($arParams['LIST_CNT']);
echo '<pre>';
while($ar_res = $db_elemens->GetNext())
{
$transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams);
$arPropArray = Array( "CODE" => $transName );
$el = new CIBlockSection;
$res = $el->Update($ar_res["ID"], $arPropArray);
echo "result for <b>".$ar_res["NAME"]."</b> is <b>".$transName.'</b>'.($res?" and OK":" and failed")."\r\n";
}
echo '</pre>';
}elseif($arParams['TYPE_WORK'] == 'element'){//для элементов
$db_elemens = CIBlockElement::GetList($arOrder, $arFilter, false, array("nTopCount" => $arParams['LIST_CNT']));
echo '<pre>'; //для форматированного вывода результата генерации
while($obElement = $db_elemens->GetNextElement())
{
$ar_res = $obElement->GetFields();
$transName = CUtil::translit(trim($ar_res["NAME"]), "ru", $arTransParams);//функция генерации сим. кода из имени
$arPropArray = Array( "CODE" => $transName."-".$ar_res["ID"], );//к готовому коду добавляем "префикс" - "-id"
$el = new CIBlockElement;
$res = $el->Update($ar_res["ID"], $arPropArray);//записываем результат, перезаписываем код у данного элемента
echo $transName."-".$ar_res["ID"]."<br />"; //выводим результат
}
echo '</pre>';
}
?>