Задача:
С генерировать символьные коды для разделов или элементов инфоблока - если они не заданы
[spoiler]
Используя скриптпредложенный Николаем Ефремовым делаем так:
1/ открываем командную строку PHP - Рабочий стол - Настройки - Инструменты - Командная PHP-строка [/bitrix/admin/php_command_line.php]
Скопировать в область кода следующий скрипт
2/ Определяемся с инфоблоком - ниже в скрипте в параметр $arParams['IBLOCK_ID'] нужно записать его ID
3/ Решаем, нужно ли нам генерировать совсем уникальные коды. Можно вначале пройтись и создать не повторяющиеся, а для повторяющихся добавить в конце ID. За это отвечает параметр $arParams['IS_ADD_RAND'] - {true|false}
4/ Указываем шаг выборки - параметр $arParams['LIST_CNT'] - большим не стоит делать, максимум 100 элементов за раз
5/ Настраиваем параметры транслита. За это отвечает массив $arTransParams
6/ Указываем для чего будем проводить генерацию - для разделов или для элементов - параметр $arParams['TYPE_WORK'] - возможные значения - {section | element}
7/ Жмем кнопку выполнить - прогнать скрипт нужное количество раз
С генерировать символьные коды для разделов или элементов инфоблока - если они не заданы
[spoiler]
Используя скрипт
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'; // {section | element} $arOrder = array( "sort" => "inc", ); $arFilter = array( "IBLOCK_ID" => $arParams['IBLOCK_ID'], "IBLOCK_LID" => SITE_ID, //"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'){ //for SECTIONS $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'){ // for ELEMENTS $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', // 'L' - toLower, 'U' - toUpper, false - do not change "replace_space" => '-', "replace_other" => '-', "delete_repeat_replace" => true ); |
6/ Указываем для чего будем проводить генерацию - для разделов или для элементов - параметр $arParams['TYPE_WORK'] - возможные значения - {section | element}
7/ Жмем кнопку выполнить - прогнать скрипт нужное количество раз