Для того, чтобы создать 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-инфоблок.
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.