Битрикс – выгрузка картинок товара из заказа

Понадобилось разработать дополнительный функционал для сайта на Битриксе. В месте с заказом нужно было передать картинки товаров из заказа – для импорта на свой сайт (или 1с). В итоге мы сделаем волшебную кнопку которая будет собирать все картинки с заказа, архивировать и передавать пользователю.

Начнём со сбора картинок. Создадим отдельный файл img_import.php в корне сайт или в отдельной категории. Запишем в него:

<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php"); ?>
<? CModule::IncludeModule('sale');
$order_id = 100; // ID вашего заказа
$res = CSaleBasket::GetList(array(), array("ORDER_ID" => $order_id)); 

while ($arItem = $res->Fetch()) {
    echo $arItem['PRODUCT_ID'];
}
?>
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>

Данный код подключит компонент корзины. А потом выведет все id товаров на экран что содержит заказ номер 100. Зная id товара мы легко найдём картинки закреплённые за ним.

В цикл while дописываем:

$element = CIBlockElement::GetByID($arItem['PRODUCT_ID']);
$nextElement = $element->GetNextElement();
$properties = $nextElement->GetProperties();
$field = $properties->GetFields();

И таким образом получаем доступ ко всем возможным свойствам элемента. выведем на экран название, артикул товара и ссылку на картинку товара:

echo $arItem['NAME'];
echo $properties['CML2_ARTICLE']['VALUE'];
echo CFile::GetPath($field['DETAIL_PICTURE']);

Так же будет необходимо проверить название товара и удалить из него все спец символы которые могут в нём встретится.

$key = array("/", "\"", "#");
$itemName = str_replace($key, "", $arItem['NAME']);

Осталось за малым – закинуть все картинки в архив под своим именем и дать пользователю возможность скачать этот архив.

Допишем в цикл:

$zip = new ZipArchive();
$zip->open($order_id . "_img_arc.zip", ZIPARCHIVE::CREATE);
$zip->addFile(".." . CFile::GetPath($field['DETAIL_PICTURE']), $properties['CML2_ARTICLE']['VALUE'] . " - " . $itemName . ".png");
$zip->close();

Тут идёт создание архива с именем id заказа + _img_arc.zip и в цыкле помещаем в него картинки. Название картинок меняем на артикул товара + название товара.

Но мы же не хотим каждый раз лазить в код и менять номер заказа чтобы получить его картинки, по этому напишем форму в которую можно будет вбить номер и получить картинки. Все в месте это будет выглядеть так:

<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetTitle("Импорт картинок");
//error_reporting(-1);
CModule::IncludeModule('sale');
if (isset($_GET['ORDER_ID'])) {
    $order_id = $_GET['ORDER_ID'];

    $res = CSaleBasket::GetList(array(), array("ORDER_ID" => $order_id)); // ID заказа
    $i = 0;
    while ($arItem = $res->Fetch()) {
        if ($arItem['PRODUCT_ID'] != 8006552) { //Удаляем транспортные услуги
            //echo $arItem['PRODUCT_ID'];
            $key = array("/", "\"", "");
            $itemName = str_replace($key, "", $arItem['NAME']);


            $element = CIBlockElement::GetByID($arItem['PRODUCT_ID']);
            $nextElement = $element->GetNextElement();
            $properties = $nextElement->GetProperties();
            $field = $nextElement->GetFields();

            $i++;
            echo $i . " - " . $itemName . "<br>";

            $zip = new ZipArchive();
            $zip->open($order_id . "_img_arc.zip", ZIPARCHIVE::CREATE);
            $zip->addFile(".." . CFile::GetPath($field['DETAIL_PICTURE']), $properties['CML2_ARTICLE']['VALUE'] . " - " . $itemName . ".png");
            $zip->close();
        }
    }
?>
    <a href="/<?= $order_id . "_img_arc.zip" ?>">Скачать</a>
    <br>
    <a href="/img_import.php">Назад</a>
<?
} else {
?>
    <form action="img_import.php" method="get">
        <p>Номер заказа: <input type="text" name="ORDER_ID" /></p>
        <p><input type="submit" /></p>
    </form>
<? }
?>
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *