Довольно простая заготовка скрипта импорта данных из csv файла. Представим, что у нас есть некий csv файл c комментариями к товарам: к примеру, такой:
Нужно все эти данные загрузить в инфоблок. Соответствия свойств в файле и инфоблоке следующие:
- id_com — идентификатор записи. будем их записывать в поле «внешний код» (XML_ID)
- id_pr — id товара, к которому этот комментарий относится (не станем его импортировать для простоты кода)
- name_com — ф.и.о. автора комментария (будем его записывать в пользовательское свойство инфоблока типа «строка» с кодом «FIO»)
- email_com — email автора комментария (будем его записывать в пользовательское свойство инфоблока типа «строка» с кодом «MAIL»)
- status_com — статус комментария (будем его записывать в пользовательское свойство инфоблока типа «список» с кодом «IS_SHOW»)
- date_com — дата написания комментария (будем его записывать в пользовательское свойство инфоблока типа «дата/время» с кодом «DATE»)
Сам код импорта:
<?php require_once $_SERVER['DOCUMENT_ROOT']. '/bitrix/modules/main/include/prolog_before.php'; ?> <h1>Импорт комментариев к товарам</h1> <p> Источник: data.csv - файл должен располагаться в <b>/dev-import/catalog/items-comments/</b><br> Кодировка: UTF-8<br> Разделитель ячеек: |<br> </p> результат работы...<br> <? $handle = fopen($_SERVER['DOCUMENT_ROOT'].'/dev-import/catalog/items-comments/data.csv', 'r'); if ($handle) { $counter = 0; $keys = array(); $data = array(); while (($buffer = fgets($handle)) !== false) { $counter++; //удаляем из прочитанной строки все символы переноса $buffer = str_replace(array("\r\n", "\r", "\n"), '', $buffer); $str =explode('|', $buffer); if ($counter==1){ $keys = $str; } else{ $el = array(); foreach ($str as $key=>$item){ $el[$keys[$key]] = $item; } $data[] = $el; } } if (!feof($handle)) { echo "Error: unexpected fgets() fail\n"; } fclose($handle); CModule::IncludeModule('iblock'); foreach ($data as $key=>$el){ $bs = new CIBlockElement; //значение "не показывать комментарий" $status = '1'; if ($el['status_com']=='On'){ //значение "показывать комментарий" $status = '2'; } $PROP = array(); $PROP['IS_SHOW'] = $status; $PROP['DATE'] = $el['date_com']; $PROP['FIO'] = $el['name_com']; $PROP['MAIL'] = $el['email_com']; $arFields = Array( 'ACTIVE' => 'Y', 'IBLOCK_ID' => 4, 'NAME' => 'cmt_'.$el['id_com'], 'XML_ID' => 'cmt_'.$el['id_com'], 'PROPERTY_VALUES'=> $PROP, ); if($PRODUCT_ID = $bs->Add($arFields)){ echo $key.'.New ID: '.$PRODUCT_ID.'(XML_ID = cmt_'.$el['id_com'].')<br>'; } else{ echo $key.'.Error: '.$bs->LAST_ERROR.'<br>'; } } } ?>