Задача:
С генерировать символьные коды для разделов или элементов инфоблока — если они не заданы
Используя скрипт предложенный Николаем Ефремовым делаем так:
1/ открываем командную строку PHP — Рабочий стол — Настройки — Инструменты — Командная PHP-строка [/bitrix/admin/php_command_line.php]
Скопировать в область кода следующий скрипт
if(!CModule::IncludeModule("iblock"))
{
echo "Error with iblock module!";
die;
}
$arParams['IBLOCK_ID'] = 17;
$arParams['LIST_CNT'] = 50;
$arParams['IS_ADD_RAND'] = false;
$arParams['TYPE_WORK'] = 'section';
$arOrder = array(
"sort" => "inc",
);
$arFilter = array(
"IBLOCK_ID" => $arParams['IBLOCK_ID'],
"IBLOCK_LID" => SITE_ID,
"CODE" => false
);
$arTransParams = array(
"max_len" => 100,
"change_case" => 'L',
"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);
if($arParams['IS_ADD_RAND']){
$transName = $transName.$arTransParams["replace_space"].$ar_res["ID"];
}
$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']));
$i = 0;
echo '<pre>';
while($obElement = $db_elemens->GetNextElement())
{
$ar_res = $obElement->GetFields();
$transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams);
if($arParams['IS_ADD_RAND']){
$transName = $transName.$arTransParams["replace_space"].$ar_res["ID"];
}
$arPropArray = Array( "CODE" => $transName, );
$el = new CIBlockElement;
$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>';
}
|
2/ Определяемся с инфоблоком — ниже в скрипте в параметр $arParams[‘IBLOCK_ID’] нужно записать его ID
3/ Решаем, нужно ли нам генерировать совсем уникальные коды. Можно вначале пройтись и создать не повторяющиеся, а для повторяющихся добавить в конце ID. За это отвечает параметр $arParams[‘IS_ADD_RAND’] — {true|false}
4/ Указываем шаг выборки — параметр $arParams[‘LIST_CNT’] — большим не стоит делать, максимум 100 элементов за раз
5/ Настраиваем параметры транслита. За это отвечает массив $arTransParams
$arTransParams = array(
"max_len" => 100,
"change_case" => 'L',
"replace_space" => '-',
"replace_other" => '-',
"delete_repeat_replace" => true
);
|
6/ Указываем для чего будем проводить генерацию — для разделов или для элементов — параметр $arParams[‘TYPE_WORK’] — возможные значения — {section | element}
7/ Жмем кнопку выполнить — прогнать скрипт нужное количество раз