При работе с Битрикс столкнулись с задачей экспорта массива некоторых свойств разделов инфоблока из системы, импорта в систему и использования в формате массива. Для экспорта и импорта с формированием массива был выбран формат файлов csv и соответствующая библиотека.
-
В файле после подключения хедера подключить модуль работы с инфоблоками.
CModule::IncludeModule('iblock');
-
Сформировать массив для выгрузки. Для примера приведем массив из нескольких свойств разделов инфоблока:
$a = array(); $rsSections = CIBlockSection::GetList(array(),array("IBLOCK_ID" => 12,), false, array("ID","NAME","UF_LINK")); while($ar_result = $rsSections->GetNext()){ $a[$ar_result['ID']]['NAME'] = $ar_result['NAME']; $a[$ar_result['ID']]['LINK'] = $ar_result['UF_LINK']; } print_r($a);
-
Добавить в файл следующие строки библиотеки:
class CSV { private $_csv_file = null; public function __construct($csv_file) { if (file_exists($csv_file)) { //Если файл существует $this->_csv_file = $csv_file; //Записываем путь к файлу в переменную } else throw new Exception("Файл \"$csv_file\" не найден"); //Если файл не найден то вызываем исключение } public function setCSV(Array $csv) { $handle = fopen($this->_csv_file, "a"); //Открываем csv для до-записи, если указать w, то инфомация которая была в csv будет затерта foreach ($csv as $value) { //Проходим массив fputcsv($handle, explode(";", $value), ";"); //Записываем, 3-ий параметр - разделитель поля } fclose($handle); //Закрываем } public function getCSV() { $handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения $array_line_full = array(); //Массив будет хранить данные из csv while (($line = fgetcsv($handle, 0, ";")) !== FALSE) { //Проходим весь csv-файл, и читаем построчно. 3-ий параметр разделитель поля $array_line_full[] = $line; //Записываем строчки в массив } fclose($handle); //Закрываем файл return $array_line_full; //Возвращаем прочтенные данные } }
-
Сформировать строки из элементов одномерных массивов для записи их в файл. Элементы в строке нужно разделить запятыми, по окончании одномерного массива перевести курсор на новую строку.
Необходимо создать в файловой системе пустой файл формата csv для записи в него массива и указать путь к файлу.
foreach($a as $value){ $line1 = ""; $line1 = $value['NAME'].";".$value['LINK']."\n"; //Формируем строки $line1 = array($line1); $csv_new = new CSV("services/test.csv"); //Указываем путь к файлу $csv_new->setCSV($line1); //Записываем в файл print_r($line1); }
Происходит выгрузка массива в файл.
-
В файле после подключения хедера подключить модуль работы с инфоблоками.
CModule::IncludeModule('iblock');
-
Добавить в файле строки библиотеки для чтения из файла csv.
class CSV { private $_csv_file = null; public function __construct($csv_file) { if (file_exists($csv_file)) { //Если файл существует $this->_csv_file = $csv_file; //Записываем путь к файлу в переменную } else throw new Exception("Файл \"$csv_file\" не найден"); //Если файл не найден то вызываем исключение } public function setCSV(Array $csv) { $handle = fopen($this->_csv_file, "a"); //Открываем csv для до-записи, если указать w, то ифномация которая была в csv будет затерта foreach ($csv as $value) { //Проходим массив fputcsv($handle, explode(";", $value), ";"); //Записываем, 3-ий параметр - разделитель поля } fclose($handle); //Закрываем } public function getCSV() { $handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения $array_line_full = array(); //Массив будет хранить данные из csv while (($line = fgetcsv($handle, 0, ";")) !== FALSE) { //Проходим весь csv-файл, и читаем построчно. 3-ий параметр разделитель поля $array_line_full[] = $line; //Записываем строчки в массив } fclose($handle); //Закрываем файл return $array_line_full; //Возвращаем прочтенные данные } }
-
Указать путь к csv файлу с экспортированным содержимым, получить массив и записать в переменную.
$csv = new CSV("services/test.csv"); //Указываем путь к файлу $get_csv = $csv->getCSV(); //Получаем значения массива print_r($get_csv);
Для импорта в csv файл необходимо:
Для экспорта из csv файла необходимо:
Таким образом можно экспортировать/импортировать массив в файл формата csv.