Иногда по тем или иным причинам нужно сделать быструю транслитерацию всех элементов инфоблока. Пользователи сайтов зачастую забывают сразу заюзать соответствующую опцию (довольствуясь использованием ID) и накапливается целая «гора» элементов без заданного CODE.
Данный код вполне подойдет для этой операции. Лично я опробовал его несколько раз.
Транслит NAME производится в CODE элемента.
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 |
CModule::IncludeModule('iblock'); //create CODE дл¤ всех методом translite NAME $arFilter = array( "IBLOCK_ID" => 62 ); $arOrder = array('DATE_ACTIVE_FROM'=>'DESC'); $DBres = CIBlockElement::GetList($arOrder, $arFilter, false, false); $el = new CIBlockElement; while ($res = $DBres->GetNext()) { $params = Array( "max_len" => "100", // обрезает символьный код до 100 символов "change_case" => "L", // буквы преобразуютс¤ к нижнему регистру "replace_space" => "_", // мен¤ем пробелы на нижнее подчеркивание "replace_other" => "_", // мен¤ем левые символы на нижнее подчеркивание "delete_repeat_replace" => "true", // удал¤ем повторяющиеся нижние подчеркивания "use_google" => "false", // отключаем использование google ); $res["CODE"]=CUtil::translit($res["NAME"], "ru", $params); $arParams = Array( "CODE" => $res["CODE"], // элемент изменен текущим пользователем ); $f = $el->Update($res['ID'], $arParams); if ($f) { echo "OK: ".$f.', new_code =>'.$res['CODE']; } else { echo "Error: ".$el->LAST_ERROR; } echo '<br>'; } |