Понадобилось выгрузить список email адресов покупателей из соответствующего административного раздела.
/bitrix/admin/sale_buyers.php
Но вот незадача, полноценной выгрузки единым файлом в системе не предусмотрено. Есть конечно, постраничная выгрузка для "формы отчёта" (списка элементов), но это порядка 20 страниц по 200 строк, т. е. 20 файлов. Но, как оказалось, есть вариант ускорить работу. В частности, смотрим код файла sale_buyers.php и находим вызов метода CSaleUser::GetBuyersList(). Документации по нему найти пока не удалось, возможно она ещё не готова, но суть метода (как я понял) заключается в получении списка покупателей с заданной сортировкой, по заданному фильтру и с возможностью группировки.
http://bxapi.ru/src/?id=173427
Используем этот метод с группировкой по полю EMAIL, чтобы исключить повторение, формируем строки для вывода в виде CSV и сохраняем в файл.
Подобным образом, думаю, можно поступать и с другими "формами отчёта" при необходимости выгрузки.
UPDATE 01.12.2014:
Изменён подключаемый модуль, а также способ записи в CSV-файл.
/bitrix/admin/sale_buyers.php
Но вот незадача, полноценной выгрузки единым файлом в системе не предусмотрено. Есть конечно, постраничная выгрузка для "формы отчёта" (списка элементов), но это порядка 20 страниц по 200 строк, т. е. 20 файлов. Но, как оказалось, есть вариант ускорить работу. В частности, смотрим код файла sale_buyers.php и находим вызов метода CSaleUser::GetBuyersList(). Документации по нему найти пока не удалось, возможно она ещё не готова, но суть метода (как я понял) заключается в получении списка покупателей с заданной сортировкой, по заданному фильтру и с возможностью группировки.
function GetBuyersList($arOrder = Array(), $arFilter = Array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = Array()) {...} |
Используем этот метод с группировкой по полю EMAIL, чтобы исключить повторение, формируем строки для вывода в виде CSV и сохраняем в файл.
if (CModule::IncludeModule("iblock")) { $sFilename = $_SERVER["DOCUMENT_ROOT"] . "/upload/orlnd-" . md5(date("Y-m-d H:i:s")) . ".csv"; $sOutput = ""; $iCount = 0; $rsBuyers = CSaleUser::GetBuyersList(array(), array("!EMAIL" => false), array("EMAIL")); $iCount = $rsBuyers->SelectedRowsCount(); while ($arBuyer = $rsBuyers->Fetch()) { $sOutput .= '"' . $arBuyer["EMAIL"] . '";'; $sOutput .= "\n"; } echo "Founded items: {$iCount}<br />\n"; if (strlen($sOutput) > 0) { $rFile = fopen($sFilename, "a"); fwrite($rFile, $sOutput); fclose($rFile); echo "The result is saved in a file: {$sFilename}<br />\n"; } } |
UPDATE 01.12.2014:
Изменён подключаемый модуль, а также способ записи в CSV-файл.
if (CModule::IncludeModule("sale")) { $sFilename = "orlnd-" . md5(date("Y-m-d H:i:s")) . ".csv"; $iCount = 0; $rsBuyers = CSaleUser::GetBuyersList(array(), array("!EMAIL" => false), array("EMAIL")); $iCount = $rsBuyers->SelectedRowsCount(); echo "Founded items: {$iCount}<br />\n"; if ($iCount > 0) { $rFile = fopen($_SERVER["DOCUMENT_ROOT"] . "/upload/" . $sFilename, "a"); while ($arBuyer = $rsBuyers->Fetch()) { fputcsv($rFile, array($arBuyer["EMAIL"])); } fclose($rFile); echo "The result is saved in a file: <a href="/upload/{$sFilename}" target="_blank">{$sFilename}</a><br />\n"; } } |