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

К данному классу я уже обращался при обработке CSV-файла для загрузки данных в систему.

Для создания CSV-файла собираем массив $arRows с данными и для удобства массив заголовков выносим отдельно, в массив $arFields. Получение полей для файла оставим за кадром, на ваше усмотрение.

Для начала подключаем класс для работы с CSV:

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

Далее очистим созданный ранее файл (если этого не сделать будет производиться дозапись в файл)

$filePath = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/catalog_export/' . 'googleAdwords.csv';
$fp = fopen($filePath, 'w+');
@fclose($fp);

Зададим режим работы класса, установим разделитель данных, отметим, что в первой строке содержатся заголовки данных:

$fields_type = 'R'; //дописываем строки в файл
$delimiter = ";";   //разделитель для csv-файла
$csvFile = new \CCSVData($fields_type, false);
$csvFile->SetFieldsType($fields_type);
$csvFile->SetDelimiter($delimiter);
$csvFile->SetFirstHeader(true);

Запишем в файл заголовки:

$csvFile->SaveFile($filePath, $arFields);

Далее пройдемся по всем строкм данных и допишем их в файл:

foreach ($arRows as $row)
{
	$writeAr = array();
	foreach ($arFields as $field)
	{
		$writeAr[] = $row[$field];
	}
	$csvFile->SaveFile($filePath, $writeAr);
}

В результате, в файле, прописанном в переменной filePath будет доступен наш новый файл

Update 2018-06-16 - Выгрузка в CSV-файл всех значений свойства типа "Список"

Для начала создаем функцию, которая помещает данные в файл:

require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/csv_data.php");
function putDataToCSV($file,$array){
	$fields_type = 'R'; //дописываем строки в файл
	$delimiter = ";";   //разделитель для csv-файла
	$csvFile = new \CCSVData($fields_type, false);
	$csvFile->SetFieldsType($fields_type);
	$csvFile->SetDelimiter($delimiter);
	$csvFile->SetFirstHeader(true);
	$arrayFields = array();
	foreach (array_keys($array[current(array_keys($array))]) as $value)
	{
		if(substr($value,0,1)=='~') continue;
		$arrayFields[] = $value;
	}
	// запишем заголовки:
	$csvFile->SaveFile($file,$arrayFields);

	foreach ($array as $arValue){
		$row = array();
		foreach ($arrayFields as $arrayField)
		{
			$row[] = $arValue[$arrayField];
		}
		$csvFile->SaveFile($file,$row);
	}
}

Дальше - получаем список значений для записи:

\Bitrix\Main\Loader::includeModule('iblock');
$db_enum_list = CIBlockProperty::GetPropertyEnum("COLLECTION", Array(),
	Array("IBLOCK_ID"=>projectInit::catalogIblock)
);
$collections = array();
while ($ar_value = $db_enum_list->GetNext()){
	$collections[$ar_value['ID']] = $ar_value;
}

Определяем файл для записи:

use Bitrix\Main\IO,
Bitrix\Main\Application;
$fileWithPropsValue = '/upload/pai/collections.csv';
if(!IO\Directory::isDirectoryExists(Application::getDocumentRoot() . '/upload/pai/')){
	IO\Directory::createDirectory(Application::getDocumentRoot() . '/upload/pai/');
}
$file = new IO\File(Application::getDocumentRoot() . $fileWithPropsValue);
$file->putContents(''); // очищаем файл

putDataToCSV(Application::getDocumentRoot().$fileWithPropsValue,$collections);

Готово! Данный скрипт использовался для переноса данных со старой версии одного сайта из свойства типа "Список" в highload-инфоблок.

Количество показов: 7627
31.05.2017




Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.