+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Работа с CSV. Как сгенерировать CSV-файл в Битрикс

Добрый день, уважаемые читатели!

В этой статье я хочу предложить вашему вниманию описание работы с CSV-файлами в Битрикс.
Надеюсь, все в курсе того, что есть такая замечательная вещь, как импорт/экспорт инфоблоков, а также торгового каталога (в соответствующих редакциях) в CSV и XML-файлы.

Но что делать в случае, если в CSV-файл необходимо внести товары только одного раздела, сохраняя структуру его подразделов и принадлежность товаров к ним? Что делать в случае, если в CSV-файл необходимо экспортировать все свойства какого-то инфоблока, с учетом их типов, символьных кодов и т.п.?

Что делать, если нужен такой CSV-файл, который не получишь нажатием одной кнопочки в админке?
Для этого в Битрикс есть класс CCSVData.

1. Подключаем.

Чтобы использовать его в своем скрипте, вначале его подключаем:

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/csv_data.php");

2. Создаем объект, задаем тип полей и разделители

Затем создаем новый объект класса:

$csvFile = new CCSVData();
$fields_type = 'R';
$delimiter = ";";
$csvFile->SetFieldsType($fields_type);
$csvFile->SetDelimiter($delimiter);

3. Визуализируем задачу (по необходимости)

Я не знаю, как остальные, но я - человек, который лучше воспринимает информацию зрительно. Поэтому всегда либо ручкой на листочке, либо в какой-то программе – сначала  я проектирую то, как должен выглядеть результат. Мой результат в данной задаче – это CSV-файл с нужными столбцами в нужном порядке. Я открываю Excel и делаю такой файл, вернее, его «шапку» - пишу все столбцы, которые мне нужны – чтобы ничего не забыть.
Если уверены, что можете все держать в голове, и ничего не забыли, то пропускайте этот шаг.

На основе тех столбцов, которые нам нужны, собираем  шапку – это обычный массив, каждое значение которого – это название столбца.

$arrHeaderCSV = array("NAME","CODE","SORT","GROUP1","GROUP2","PREVIEW_TEXT", 
"DETAIL_TEXT","SMALL_IMG","BIG_IMG","PRICE", "CURRENCY",
"CATALOG_QUANTITY","CATALOG_QUANTITY_TRACE", 
"ARTICUL","NEW","MOREPHOTO","ACTIVE",
"EX_ID","CODG_1", "CODG_2", "G_ACT1", 
"G_ACT2","G_SORT1","G_SORT2","XML_ID", "S_TYPE","B_TYPE");

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

Сделали «шапку» - сохраняем:

$csvFile->SaveFile("astra.csv", $arrHeaderCSV);

Метод  SaveFile дописывает в файл, имя которого указано в 1 параметре, строчку с данными, которые содержатся в массиве $arrHeaderCSV.

Открываем astra.csv, который сгенерировался , в Excel – все ОК, получилось тоже самое, что я сначала проектировала «руками».

4. Генерируем CSV.

Дальше запускаем скрипт, который собирает данные и дописывает их в файл.

В моем скрипте это был цикл,  в теле которого на каждом шаге собирался опять же массив, аналогичный массиву с «шапкой», только со значениями соответствующих полей, а не их названиями  и вызывался метод SaveFile. Скрипт большой, т.к. он еще и «дергал» фото +доп.фото товаров, а также сохранял старые ID товаров, чтобы потом перенести торговые предложения. Выкладывать сюда такой объем кода не вижу никакого смысла – вас это только запутает.

В принципе, все. Как видите, все очень просто.

5. Итоги

Подведем итог. Чтобы сгенерировать CSV-файл, (который только душенька пожелает), нужно:

- подключить класс для работы с CSV
- задать тип полей и разделители
- собрать "шапку" для CSV-файла (если таковая вообще вам нужна)
- при помощи метода SaveFile сгенерировать файл на основе массива данных (каждая строчка – это массив).




Назад в раздел

Подписаться на новые материалы раздела:














CAPTCHA