Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Генерация символьного кода при импорте csv

+11 голос
6
В опциях инфоблока установил "Транслитерировать из названия при добавлении ". Если добавлять элементы и разделы вручную, то всё отлично.

Однако при импорте CSV транслитерация не работает smile:cry: .

Когда элементы/разделы добавляются вручную через веб-интерфейс, то эта функция не так уж нужна (не велик трудно и самому одно поле заполнить).

А вот при импорте csv, когда разом добавляются сотни новых элементов, очень нужна такая функция, но к сожалению не работает.

 Можно ли решить эту проблему "малой кровью" (без вторжения в исходники модулей), если да то как?
спросил 30 Ноя, 13 от FlashKO (130 баллов)

6 Ответы

00 голосов
/bitrix/php_interface/init.phpЕсли по этому пути нет этого файла, то создайте его.
ответил 13 Янв, 13 от SOROKS (640 баллов)
показан 16 Март, 16 от root
00 голосов
Повесить обработчик на события OnBeforeIBlockElementAdd и OnBeforeIBlockElementUpdate - для элементов. Для разделов - OnBeforeIBlockSectionAdd и OnBeforeIBlockSectionUpdate
ответил 26 Янв, 14 от Pomnep (13,960 баллов)
00 голосов
дополню - в обработчике использовать функцию Cutil::translit($str, $lang, $params = array())
ответил 14 Май, 14 от Texnik (1,860 баллов)
+11 голос
дополню -

Код
<?
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "AddElementOrSectionCode"); 
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "AddElementOrSectionCode"); 
AddEventHandler("iblock", "OnBeforeIBlockSectionAdd", "AddElementOrSectionCode"); 
AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate", "AddElementOrSectionCode"); 

function AddElementOrSectionCode(&$arFields) { 
   $params = array(
      "max_len" => "100", 
      "change_case" => "L", 
      "replace_space" => "_", 
      "replace_other" => "_", 
      "delete_repeat_replace" => "true", 
      "use_google" => "false", 
   );
   
   if (strlen($arFields["NAME"])>0 && strlen($arFields["CODE"])<=0 && $arFields["IBLOCK_ID"] == 16) {
      $arFields['CODE'] = CUtil::translit($arFields["NAME"], "ru", $params);    
   }
}
?>


только вместо $arFileds["IBLOCK_ID"] == 16 
ID вашего ИБ
ответил 11 Сен, 14 от SOROKS (640 баллов)
Спасибо, помогло!
+11 голос
TemaS
Огромное спасибо! Теперь всё работает как часы!
+1
smile:)
ответил 16 Янв, 15 от FlashKO (130 баллов)
00 голосов
TemaS 
подскажи пожалуйста куда вводить этот код?у меня после выгрузки товаров из 1с поля символьного кода пустые
ответил 02 Май, 15 от NoS (140 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 05 Дек, 17 от аноним
0 голосов
1 ответ
спросил 23 Янв, 14 от Aribor (560 баллов)
0 голосов
4 ответов
0 голосов
1 ответ