Всем спасибо.
Платный модуль не смотрел, так как уже в тот момент разбирался со своим скриптом генерации.
Бесплатный модуль поставил, понравился, НО есть некоторые моменты.
А именно:
1. При транслитерации кода используются параметры по умолчанию, а хотелось бы чтоб параметры брались из настроек выбранного инфоблока. Например мне нужно, чтоб замена для символа пробела была не "_", а "-" и Максимальная длина не 100, а 75
Допиливается в в модуле в файле bitrix\modules\av.ibprops\classes\general\av_ibprops.php строка 416 вставляем массив параметров $params, ну и выше объявляем сам массив(например после 412 строки $arTmp = Array() ;) :
Код |
---|
$params = Array(
"max_len" => "75", // обрезает символьный код до 75 символов
"change_case" => "L", // буквы преобразуются к нижнему регистру
"replace_space" => "-", // меняем пробелы на нижнее подчеркивание
"replace_other" => "-", // меняем левые символы на нижнее подчеркивание
"delete_repeat_replace" => "true", // удаляем повторяющиеся нижние подчеркивания
"use_google" => "false", // отключаем использование google
);
...
$arTmp[$k] = CUtil::Translit($arTmp[$k], "ru", $params);
|
2. Если нужно изменить КОДЫ разделов:
написал свой скрипт:
Код |
---|
//Для разделов
$arFilter = Array("IBLOCK_ID"=>29); //свой ID инфоблока
$db_list = CIBlockSection::GetList(Array(), $arFilter, false);
while($ar_result = $db_list->GetNext()){
$params = Array(
"max_len" => "75", // обрезает символьный код до 75 символов
"change_case" => "L", // буквы преобразуются к нижнему регистру
"replace_space" => "-", // меняем пробелы на нижнее подчеркивание
"replace_other" => "-", // меняем левые символы на нижнее подчеркивание
"delete_repeat_replace" => "true", // удаляем повторяющиеся нижние подчеркивания
"use_google" => "false", // отключаем использование google
);
$CODE_translit = CUtil::translit($ar_result["NAME"], "ru", $params);
$bs = new CIBlockSection;
$arFields = Array(
"CODE" => $CODE_translit
);
$SECTION_ID = $ar_result['ID'];
$res_upd_sec = $bs->Update($SECTION_ID, $arFields);
}
|
3. Оставлять дату изменения не изменной, т.е. если мы обновляем сразу все элементы, то получается мы затираем всю статистику изменения элементов к примеру у меня за года 2-3
Эту проблему я так и не решил.
Ну и выкладываю скрипт для генерации кода для элементов:
Код |
---|
//Для элементов
$arFilter = Array("IBLOCK_ID"=>29); //свой ID инфоблока
$arSelect = Array("ID", "NAME");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement()){
$ccc++;
$arFieldsElement = $ob->GetFields();
$params = Array(
"max_len" => "75", // обрезает символьный код до 75 символов
"change_case" => "L", // буквы преобразуются к нижнему регистру
"replace_space" => "-", // меняем пробелы на нижнее подчеркивание
"replace_other" => "-", // меняем левые символы на нижнее подчеркивание
"delete_repeat_replace" => "true", // удаляем повторяющиеся нижние подчеркивания
"use_google" => "false", // отключаем использование google
);
$CODE_translit = CUtil::translit($arFieldsElement["NAME"], "ru", $params);
$el = new CIBlockElement;
$arLoadProductArray = Array(
"CODE" => $CODE_translit
);
$PRODUCT_ID = $arFieldsElement['ID']; // изменяем элемент с кодом (ID)
$res_upd_el = $el->Update($PRODUCT_ID, $arLoadProductArray);
}
|