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


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

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

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

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

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

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

6 Ответы

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

Код
<?
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 баллов)
+1 голос
TemaS
Огромное спасибо! Теперь всё работает как часы!
+1
smile:)
ответил 17 Янв, 15 от FlashKO (130 баллов)
0 голосов
TemaS 
подскажи пожалуйста куда вводить этот код?у меня после выгрузки товаров из 1с поля символьного кода пустые
ответил 02 Май, 15 от NoS (140 баллов)

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

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