Перед применением в инфоблок нужно добавить свойство типа "Строка" с кодом
CODE_TEST.Настоятельно рекомендуется сначала проверить на одном / нескольких элементах — для этого в переменную
$id записываем id элемента. Как вы можете заметить, поле DETAIL_TEXT каждый раз добавляется в $arParams — это потому что методом проб было обнаружено что оно при обновлении элемента "обнуляется". Итак, просто создаём в корне любой файл, например test.php, добавляем в него код, правим под себя и запускаем в браузере.
<?
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$APPLICATION->SetTitle("test");
global $USER;
if (!$USER->IsAdmin()) die("Доступ запрещен");
?>
<style>
img {
width: 100px;
height: auto;
}
pre {
margin-bottom: 0.25em;
}
</style>
<br>
<?
$hasError = false;
$hasEls = 0;
$pageSize = 50; // Кол-во на странице (элементов за один проход)
$iblockID = 9; // ID инфоблока
$maxWidth = 1656;
$id = false;
if(CModule::IncludeModule('iblock')) {
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "PREVIEW_PICTURE", "DETAIL_PICTURE", "DETAIL_TEXT");
$arFilter = Array("IBLOCK_ID"=>$iblockID, "!DETAIL_PICTURE"=>false);
if($id) {
$arFilter['ID'] = $id;
} else {
// $arFilter['!PREVIEW_PICTURE'] = false;
$arFilter['PROPERTY_CODE_TEST'] = false;
}
$res = CIBlockElement::GetList(Array("ID"=>"ASC"), $arFilter, false, Array("nPageSize"=>$pageSize), $arSelect);
while($arItem = $res->Fetch()){
$hasEls++;
$deletePreviewPicture = false;
echo '<br>';
echo($arItem['ID'].' - '.$arItem['NAME']);
$arItemPreview = CFile::GetByID($arItem['PREVIEW_PICTURE'])->Fetch();
$arItemDetail = CFile::GetByID($arItem['DETAIL_PICTURE'])->Fetch();
if($arItemPreview['ORIGINAL_NAME'] == $arItemDetail['ORIGINAL_NAME']) {
$deletePreviewPicture = true;
echo('Удалили PREVIEW_PICTURE<br>');
$filePreview = $_SERVER['DOCUMENT_ROOT'].$arItemPreview['SRC'];
if(file_exists($filePreview)) {
$info = pathinfo($filePreview);
$webpFile = $info['dirname'].'/'.$info['filename'].'.webp';
if($info['extension'] != 'webp') {
if(file_exists($webpFile)) {
if(unlink($webpFile)) {
echo('Удалили файл webp PREVIEW<br>');
}
}
}
}
// echo '<img src="'.$arItemPreview['SRC'].'"> ';
}
$bResizePictures = false;
if($arItemDetail['WIDTH'] > $maxWidth) {
echo ('DETAIL width: '.$arItemDetail['WIDTH'].'x'.$arItemDetail['HEIGHT'].'<br>');
$bResizePictures = true;
}
if($deletePreviewPicture || $bResizePictures) {
$arParams = array(
'TIMESTAMP_X' => FALSE,
'DETAIL_TEXT' => $arItem['DETAIL_TEXT'],
'DETAIL_TEXT_TYPE' => $arItem['DETAIL_TEXT_TYPE'],
);
if($deletePreviewPicture)
$arParams['PREVIEW_PICTURE'] = ['del' => 'Y']; // Удалить PREVIEW_PICTURE
if($bResizePictures)
$arParams['DETAIL_PICTURE'] = CFile::MakeFileArray($arItem['DETAIL_PICTURE']);
$el = new \CIBlockElement;
if($el->Update(
$arItem['ID'],
$arParams,
false,
false,
$bResizePictures // bResizePictures
)
) {
if($deletePreviewPicture) {
// Физически удаляем файл Preview если он остался на диске
$filePreview = $_SERVER['DOCUMENT_ROOT'].$arItemPreview['SRC'];
if(file_exists($filePreview)) {
$info = pathinfo($filePreview);
$webpFile = $info['dirname'].'/'.$info['filename'].'.webp';
if(unlink($filePreview)) {
echo('Удалили файл PREVIEW<br>');
}
if($info['extension'] != 'webp') {
if(file_exists($webpFile)) {
if(unlink($webpFile)) {
echo('Удалили файл webp PREVIEW<br>');
}
}
}
}
}
// Если уменьшаем Detail_picture — удаляем файл webp
if($bResizePictures) {
$fileDetail = $_SERVER['DOCUMENT_ROOT'].$arItemDetail['SRC'];
$info = pathinfo($fileDetail);
$webpFile = $info['dirname'].'/'.$info['filename'].'.webp';
if($info['extension'] != 'webp') {
if(file_exists($webpFile)) {
if(unlink($webpFile)) {
echo('Удалили файл webp DETAIL<br>');
}
}
}
}
} else {
$hasError = true;
echo($el->LAST_ERROR);
}
}
// if($id)
CIBlockElement::SetPropertyValues($arItem['ID'], $arItem['IBLOCK_ID'], 'Y', 'CODE_TEST');
}
}
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>
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");Скрипт будет работать только для администраторов сайта. На всякий случай )
Скачать:
