Понадобилось выгрузить список email адресов покупателей из соответствующего административного раздела.
/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()) {...} http://bxapi.ru/src/?id=173427 Используем этот метод с группировкой по полю 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";
}
}
Подобным образом, думаю, можно поступать и с другими "формами отчёта" при необходимости выгрузки.
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев