Импорт CSV в публичной части сайта на Bitrix

Как реализовать требуемый функционал?
Допустим, правильно подготовленные файлы у нас есть.
Хотелось бы подгружать их из публичной части и что бы происходил импорт в инфоблок.
Это вообще возможно?
  • Вопрос задан
  • 2880 просмотров
Решения вопроса 1
ioffeaod
@ioffeaod
Web программист
Вот готовое решение.
// абсолютный путь до файла 
$file_name = 'csv/import.csv'; 

// подключам Модуль Main.
CModule::IncludeModule("main");
// подключам Модуль Информационные блоки.
CModule::IncludeModule("iblock");
// подключам Модуль Каталог.
CModule::IncludeModule("catalog");

$el = new CIBlockElement;

$params = Array(
	"max_len" => "200", // обрезает символьный код до 100 символов
	"change_case" => "L", // буквы преобразуются к нижнему регистру
	"replace_space" => "_", // меняем пробелы на нижнее подчеркивание
	"replace_other" => "_", // меняем левые символы на нижнее подчеркивание
	"delete_repeat_replace" => "true", // удаляем повторяющиеся нижние подчеркивания
	"use_google" => "false", // отключаем использование google
); 

if(($handle_f = fopen($file_name, "r" )) !== FALSE)
{
	fseek($handle_f, $im);
	while(!feof($handle_f))
	{
		$line = fgets($handle_f);
		
		// меняем кодировку в файле на UTF-8
		$buffer = iconv("WINDOWS-1251", "UTF-8", $line);

		//разбиваем строку на значения и помещаем в массив
		$data = explode(';', $buffer);
		
		// свойства товара.
		$PROP = array();
		$PROP[315] = $data[2];  // Артикул
		$PROP[355] = $data[1];  // Бренд
		$PROP[356] = "PRIDE";  	// Поставщик

		// изображение.
		$img = CFile::MakeFileArray('http://www.pride.ru/site_images/products/'.$data[0].'.jpg');
		
		$arLoadProductArray = Array(
			"MODIFIED_BY"    	=> 1, // элемент изменен текущим пользователем
			"IBLOCK_SECTION_ID" => "",    	// элемент лежит в разделе Инструменты
			"CODE"				=> CUtil::translit($data[3], "ru" , $params),	// символьный код
			"IBLOCK_ID"      	=> 15,			// ID инфоблока
			"PROPERTY_VALUES"	=> $PROP,		// массив свойств
			"NAME"           	=> $data[3],	// имя товара
			"ACTIVE"         	=> "Y",        	// активен
			"PREVIEW_PICTURE"   => $img,		// изображение анонса
			"DETAIL_PICTURE" 	=> $img			// детальное изображение
		);

		if($PRODUCT_ID = $el->Add($arLoadProductArray))
		{
			//
		}else{
			//
		}
	}
	fclose($handle_f);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
конечно, за счёт API. Классы CIBlockSection, CIBlockElement, CCatalogProduct и CPrice.
У стандартной php-шной fgetcsv() вроде бы есть какие-то ограничения, но можно взять аналог от Дмитрия Котерова либо свой велосипед сколхозить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
03 дек. 2020, в 11:17
1500 руб./в час
03 дек. 2020, в 11:15
400 руб./в час
03 дек. 2020, в 10:04
600 руб./в час