Генерация символьных кодов для разделов и элементов инфоблоков
Открываем командную строку PHP — Рабочий стол — Настройки — Инструменты — Командная PHP-строка [/bitrix/admin/php_command_line.php]
Скопировать в область кода следующий скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
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 '<ПРЕ>'; 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 '</ПРЕ>'; }elseif($arParams['TYPE_WORK'] == 'element'){ // for ELEMENTS $db_elemens = CIBlockElement::GetList($arOrder, $arFilter, false, array("nTopCount" => $arParams['LIST_CNT'])); $i = 0; echo '<ПРЕ>'; 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
Определяемся с инфоблоком — ниже в скрипте в параметр $arParams[‘IBLOCK_ID’] нужно записать его ID
Решаем, нужно ли нам генерировать совсем уникальные коды. Можно вначале пройтись и создать не повторяющиеся, а для повторяющихся добавить в конце ID. За это отвечает параметр $arParams[‘IS_ADD_RAND’] — {true|false}
Указываем шаг выборки — параметр $arParams[‘LIST_CNT’] — большим не стоит делать, максимум 100 элементов за раз
Настраиваем параметры транслита. За это отвечает массив $arTransParams:
1 2 3 4 5 6 7 |
$arTransParams = array( "max_len" => 100, "change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change "replace_space" => '-', "replace_other" => '-', "delete_repeat_replace" => true ); |
Указываем для чего будем проводить генерацию — для разделов или для элементов — параметр $arParams[‘TYPE_WORK’] — возможные значения — {section | element}
Жмем кнопку выполнить — прогнать скрипт нужное количество раз