3 апреля 2025
181
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
if (!CModule::IncludeModule("iblock")) {
    die("Модуль инфоблоков не подключен.");
}

$iblockId = 41; // ID инфоблока
$propertyCode = "MORE_PHOTO"; // Код свойства с изображениями

$arSelect = ["ID"];
$arFilter = [
    "IBLOCK_ID" => $iblockId,
    "ACTIVE" => "Y",
    "!PROPERTY_" . $propertyCode => false // Фильтруем только те элементы, у которых есть значение в MORE_PHOTO
];

$res = CIBlockElement::GetList([], $arFilter, false, false, $arSelect);

// Получаем настройки инфоблока для ресайза один раз
$iblockSettings = CIBlock::GetArrayByID($iblockId, "FIELDS");
$previewResize = $iblockSettings["PREVIEW_PICTURE"]["DEFAULT_VALUE"];
$detailResize = $iblockSettings["DETAIL_PICTURE"]["DEFAULT_VALUE"];

if (!function_exists('resizeImage')) {
    function resizeImage($fileArray, $resizeSettings) {
        if ($resizeSettings['SCALE'] == 'Y') {
            $resizeParams = [
                'width' => $resizeSettings['WIDTH'],
                'height' => $resizeSettings['HEIGHT']
            ];
            return CFile::ResizeImageGet(
                $fileArray,
                $resizeParams,
                BX_RESIZE_IMAGE_PROPORTIONAL_ALT,
                true
            );
        }
        return false;
    }
}

while ($element = $res->Fetch()) {
    $elementId = $element['ID'];

    // Получаем все значения свойства MORE_PHOTO
    $morePhotos = CIBlockElement::GetProperty(
        $iblockId,
        $elementId,
        ["sort" => "asc"],
        ["CODE" => $propertyCode]
    );

    $firstPhotoId = null;
    while ($photo = $morePhotos->Fetch()) {
        if (!empty($photo['VALUE'])) {
            $firstPhotoId = $photo['VALUE'];
            break; // Берем только первый ID
        }
    }

    // Если нашли хотя бы одну картинку, обновляем DETAIL_PICTURE и PREVIEW_PICTURE
    if ($firstPhotoId) {
        $detailPicture = CFile::GetFileArray($firstPhotoId);

        // Проверяем, что $detailPicture корректно создан
        if (is_array($detailPicture)) {
            // Ресайз изображений
            $previewPicture = resizeImage($detailPicture, $previewResize);
            $detailPicture = resizeImage($detailPicture, $detailResize);

            $el = new CIBlockElement;
            $arLoad = [
                "DETAIL_PICTURE" => $detailPicture ? CFile::MakeFileArray($detailPicture['src']) : $detailPicture,
                "PREVIEW_PICTURE" => $previewPicture ? CFile::MakeFileArray($previewPicture['src']) : $previewPicture
            ];

            if ($el->Update($elementId, $arLoad)) {
                echo "Updated element ID: $elementId";
            } else {
                echo "Failed to update element ID: $elementId. Error: " . $el->LAST_ERROR . "";
            }
        } else {
            echo "Failed to create file array for element ID: $elementId";
        }
    } else {
        echo "No valid MORE_PHOTO for element ID: $elementId";
    }
}
Позвоните нам!
Личный кабинет
Вам будет доступна история заказов, управление рассылками, свои цены и скидки для постоянных клиентов и прочее.
Ваш логин
Ваш пароль