Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Удалить все картинки элементов инфоблока: анонс, детальную и дополнительные картинки (MORE_PHOTO)

Просмотров: 4033 Задача: В инфоблоке 10 000 элементов, нужно удалить картинки анонса, детальные и дополнительные картинки из свойства MORE_PHOTO. Так как элементов много, скорее всего упремся в лимиты таймаутов сервера, по этому нужно сделать это пошагово.
Удалить все картинки элементов инфоблока: анонс, детальную и дополнительные картинки

Удаление картинок и очистка множественного свойства через API

Для начала сделаем скрипт, который с помощью API 1С-Битрикс выполнит всю работу за один шаг. Для работы нам нужно будет подключить пролог и эпилог и воспользоаться модулем 'iblock'

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

// Подключение необходимых модулей
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;

Loader::includeModule('iblock');

$el = new CIBlockElement;

// ВАШ ИНФОБЛОК
$IBLOCK_ID = 6; 

// Получение элементов инфоблока
$rsElements = ElementTable::getList([
    'filter' => [
        'IBLOCK_ID' => $IBLOCK_ID
    ],
    'select' => [
        'ID'
    ]
])->fetchAll();

// Это нужно для метода SetPropertyValuesEx
$Del_More_Photos = [
    0 => [
        'VALUE' => '',
        'DESCRIPTION' => ''
    ]
];

foreach ($rsElements as $element) {
    // Очищаем PREVIEW_PICTURE и DETAIL_PICTURE
    $el->Update(
        $element['ID'],
        [
            'PREVIEW_PICTURE' => [
                'del' => 'Y'
            ],
            'DETAIL_PICTURE' => [
                'del' => 'Y'
            ]
        ]
    );
    
    // Очищаем свойство MORE_PHOTO
    CIBlockElement::SetPropertyValuesEx(
        $element['ID'],
        $IBLOCK_ID,
        [
            'MORE_PHOTO' => $Del_More_Photos
        ]
    );
}

// Подключение эпилога
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');

Здесь мы, с помощью ElementTable::getList, получаем все элементы нужного инфоблока и обходим каждый элемент в цикле. Для работы нам достаточно получить только ID элемента.

C помощью CIBlockElement::Update удаляем картинки анонса и детальной. Далее, с помощью CIBlockElement::SetPropertyValuesEx ощищаем ножественное свойство MORE_PHOTO.

Обратите внимание: просто так, передав в него пустоту, очистить множественное свойство нельзя. Обязательно должен быть массив с одним ключем в котором пустые ключи со значением и описанием (создаем его до цикла в $Del_More_Photos).

Пошаговая обработка элементов инфоблока.

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

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

use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;

Loader::includeModule('iblock');

$el = new CIBlockElement;

$IBLOCK_ID = 6; // ВАШ ИНФОБЛОК
$BATCH_SIZE = 100; // Количество элементов для обработки за один шаг
$startFrom = isset($_GET['startFrom']) ? (int)$_GET['startFrom'] : 0; // Позиция, с которой начать обработку

// Получение элементов инфоблока
$rsElements = ElementTable::getList([
    'filter' => [
        'IBLOCK_ID' => $IBLOCK_ID
    ],
    'select' => [
        'ID'
    ],
    'limit' => $BATCH_SIZE,
    'offset' => $startFrom
])->fetchAll();

$Del_More_Photos = [
    0 => [
        'VALUE' => '',
        'DESCRIPTION' => ''
    ]
];

foreach ($rsElements as $element) {
    // Очищаем PREVIEW_PICTURE и DETAIL_PICTURE
    $el->Update(
        $element['ID'],
        [
            'PREVIEW_PICTURE' => [
                'del' => 'Y'
            ],
            'DETAIL_PICTURE' => [
                'del' => 'Y'
            ]
        ]
    );

    // Очищаем свойство MORE_PHOTO
    CIBlockElement::SetPropertyValuesEx(
        $element['ID'],
        $IBLOCK_ID,
        [
            'MORE_PHOTO' => $Del_More_Photos
        ]
    );
}

$processedCount = count($rsElements);
$nextStartFrom = $startFrom + $processedCount;

if ($processedCount < $BATCH_SIZE) {
    echo 'Операция завершена.';
} else {
    echo 'Обработано ' . $processedCount . ' элементов. Страница будет автоматически обновлена для продолжения...';
    ?>
    <script>
        setTimeout(function () {
            window.location.href = "?startFrom='<?=$nextStartFrom?>'";
        }, 1000); // Задержка 1 секунда перед следующим запуском
    </script>'
    <?php
}

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

Для выполнения скрипта поэтапно, обрабатывая по 100 элементов за шаг, можно использовать механизм сохранения состояния между запусками. Один из способов — это использование параметров в URL для передачи текущей позиции и подсчета обработанных элементов. Ниже приведен пример реализации такого подхода.

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Индивидуальная разработка магазина
от 300 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс