Nikovit <Путешествия и разработка>

Битрикс загрузить картинки по артикулу из файлов фотографий

Скрипт для загрузки фотографий товаров из файлов, файлы должны иметь вид артикул.jpg

Снабдил подробными комментариями в коде, если что то непонятно, пишите в комментарии))))

<?php
$_SERVER["DOCUMENT_ROOT"] = '/var/www/html/bx-site/';
require($_SERVER["DOCUMENT_ROOT"] . "bitrix/modules/main/include/prolog_before.php");

CModule::IncludeModule("iblock");

// Директория с картинками для загрузки
const DIR_IMG = '/var/www/html/bx-site/script/img-import/';

// Получем массив файлов
$img_arr_dir = scandir(DIR_IMG);

$arCode = array();
$i=0;
foreach ($img_arr_dir as $item){
    if($item == '.' or $item == '..'){
        continue;
    }
    $path = DIR_IMG . $item;
    $vendor_code = explode('.', $item);

    $arCode[$i]['code'] = $vendor_code[0];
    $arCode[$i]['path'] = $path;
    $i++;
}

//Получаем товары каталога одним запросом чтобы не дергать поодиночке
$resItemsList = CIBlockElement::GetList(
    array("ID", "NAME", "CML2_ARTICLE"),
    array("IBLOCK_ID"=>11, "CML2_ARTICLE" => array_keys($arCode)),
    false,
    false,
    array("ID", "NAME", "PROPERTY_CML2_ARTICLE")
);
// Преобразуем полученные товары в массив
$elements = array();
while ($element = $resItemsList->fetch())
{
    $elements[] = $element;
}

// Цикл которой определяет ID товара и сохраняет картинку в инфоблок
$el = new CIBlockElement;
foreach ($arCode as $item){
    // Находим ID товара по артиклу
    if($key = array_search($item["code"], array_column($elements, 'PROPERTY_CML2_ARTICLE_VALUE'))){
        echo 'Найден товар с артикулом ' . $item["code"] . ' ID: ' . $elements[$key]["ID"] . '<br>';
        //Сохраняем картинку в инфоблок
        $arLoadProductArray = Array(
            "DETAIL_PICTURE" => CFile::MakeFileArray($item["path"]),
        );
        if($el->Update($elements[$key]["ID"], $arLoadProductArray)){
            echo 'Изображение загруженно'. '<br>';
        } else {
            echo 'Изображение не загруженно'. '<br>';
        }
    } else {
        echo 'Товар с артикулом ' . $item["code"] . ' не найден' . '<br>';
    }
}

//echo '<pre>' . print_r($arCode, 1) . '</pre>';

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");