Скрипт работает только для администраторов сайта.
Можно проверить на одном элементе, добавив в arFilter
"ID" => ID элемента<?
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$APPLICATION->SetTitle("test");
error_reporting(E_ERROR);
global $USER;
if (!$USER->IsAdmin()) die("Доступ запрещен");
$hasError = false;
$hasEls = 0;
// Для элементов
if(CModule::IncludeModule('iblock')) {
$iblockID = 26;
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "DETAIL_PICTURE");
$arFilter = Array("IBLOCK_ID"=>$iblockID, "PROPERTY_TEST"=>false);
$res = CIBlockElement::GetList(Array("ID"=>"ASC"), $arFilter, false, ['nTopCount' => 10], $arSelect);
while($arItem = $res->Fetch()){
$arParams = array(
'PREVIEW_PICTURE' => ['del' => 'Y'], // Удалить PREVIEW_PICTURE
'TIMESTAMP_X' => FALSE,
);
if($arItem['DETAIL_PICTURE']) {
$img = CFile::GetByID($arItem['DETAIL_PICTURE'])->Fetch();
// Если PNG
if($img['CONTENT_TYPE'] == 'image/png') {
$imgSrc = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$img['SRC']);
if($imgSrc) {
// Конвертируем PNG в JPG
$image = imagecreatefrompng($imgSrc['tmp_name']);
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagedestroy($image);
$quality = 80; // 0 = worst / smaller file, 100 = better / bigger file
$tmpFile = $_SERVER["DOCUMENT_ROOT"].'/upload/tmp/'.str_replace('.png', '.jpg', $imgSrc['name']);
imagejpeg($bg, $tmpFile, $quality);
imagedestroy($bg);
$arParams['DETAIL_PICTURE'] = CFile::MakeFileArray($tmpFile);
} else {
// Если файла детальной картинки нет на сервере
$arParams['DETAIL_PICTURE'] = ['del' => 'Y']; // Удалить DETAIL_PICTURE
}
} else {
if($img['SRC']) {
$arParams['DETAIL_PICTURE'] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$img['SRC']);
} else {
// Если файла детальной картинки нет на сервере
$arParams['DETAIL_PICTURE'] = ['del' => 'Y']; // Удалить DETAIL_PICTURE
}
}
}
$el = new \CIBlockElement;
if($el->Update(
$arItem['ID'],
$arParams,
false,
false,
true // bResizePictures
)
) {
CIBlockElement::SetPropertyValuesEx($arItem['ID'], $iblockID, array('TEST' => 'Y'));
$hasEls++;
} else {
$hasError = true;
debug($el->LAST_ERROR);
}
}
}
if(!$hasError && $hasEls) {
echo '<div id="success">Успешно</div>';
}
?>
<script>
document.addEventListener("DOMContentLoaded", function() {
'use strict';
let success = document.getElementById('success');
if(success) {
setTimeout(() => {
location.reload();
}, 1000);
}
});
</script>