Назад

Битрикс – как удалить все картинки анонса и детальные при помощи API?

Главная
Блог
Битрикс – как удалить все картинки анонса и детальные при помощи API?

Иногда возникает необходимость массово удалить изображения в элементах инфоблока Битрикс — например, при смене дизайна, миграции данных или очистке тестовых данных. Вручную это делать долго, поэтому лучше использовать API.

Важно!

  • Этот скрипт безвозвратно удаляет файлы — восстановить их можно только из резервной копии.

  • Перед запуском обязательно сделайте бэкап базы данных и папки /upload/.

  • Рекомендуется сначала протестировать скрипт на копии сайта.

Скрипт для удаления изображений через API

1. Базовый вариант

Следующий код удаляет все изображения анонса (PREVIEW_PICTURE) и детальные (DETAIL_PICTURE) в указанном инфоблоке:

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

if (CModule::IncludeModule("iblock")) {
    $IBLOCK_ID = 1; // ID инфоблока
    $arLoadProductArray = [
        "PREVIEW_PICTURE" => ['del' => 'Y'],
        "DETAIL_PICTURE" => ['del' => 'Y'],
    ];
    
    $res = CIBlockElement::GetList(
        ["ID" => "ASC"],
        ["IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"],
        false,
        false,
        ['ID', 'NAME']
    );
    
    while ($arItem = $res->GetNext()) {
        $el = new CIBlockElement;
        $PRODUCT_ID = $arItem['ID'];
        $el->Update($PRODUCT_ID, $arLoadProductArray);
        unset($el);
    }
    
    echo "Изображения удалены!";
}
?>

Как это работает?

  • 'del' => 'Y' — флаг, который указывает Битрикс удалить файл.

  • CIBlockElement::GetList — получает элементы инфоблока.

  • $el->Update() — обновляет элемент, удаляя изображения.

2. Улучшенная версия (с обработкой ошибок и кэша)

Чтобы скрипт был надежнее, добавим:

  • Лимит элементов (чтобы избежать таймаута).

  • Очистку кэша ресайзов (/upload/resize_cache/iblock).

  • Логирование процесса.

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

if (CModule::IncludeModule("iblock")) {
    // Настройки
    $IBLOCK_ID = 1;    // ID инфоблока
    $LIMIT = 500;      // Ограничение на обработку за один запуск
    $CLEAR_CACHE = true; // Очищать кэш ресайзов
    
    $arLoadProductArray = [
        "PREVIEW_PICTURE" => ['del' => 'Y'],
        "DETAIL_PICTURE" => ['del' => 'Y'],
    ];
    
    $res = CIBlockElement::GetList(
        ["ID" => "ASC"],
        ["IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"],
        false,
        ["nTopCount" => $LIMIT],
        ['ID', 'NAME', 'PREVIEW_PICTURE', 'DETAIL_PICTURE']
    );
    
    $processed = 0;
    $errors = 0;
    
    while ($arItem = $res->GetNext()) {
        $el = new CIBlockElement;
        $PRODUCT_ID = $arItem['ID'];
        
        echo "Обработка элемента ID: {$arItem['ID']}, NAME: {$arItem['NAME']}<br>";
        
        if ($el->Update($PRODUCT_ID, $arLoadProductArray)) {
            $processed++;
            echo "Успешно<br>";
        } else {
            $errors++;
            echo "Ошибка: " . $el->LAST_ERROR . "<br>";
        }
        
        unset($el);
    }
    
    // Очистка кэша ресайзов
    if ($CLEAR_CACHE && $processed > 0) {
        DeleteDirFilesEx("/upload/resize_cache/iblock");
        echo "Кэш ресайзов очищен!<br>";
    }
    
    echo "<br><b>Итог:</b><br>";
    echo "Обработано: $processed<br>";
    echo "Ошибок: $errors<br>";
}
?>

Рекомендации и альтернативные подходы

1. Безопасность

  • Защитите скрипт (например, через .htaccess или HTTP-авторизацию).

  • Отключите резервное копирование на время выполнения (если используется автоматический бэкап).

2. Для больших каталогов

  • Разбейте выполнение на части (например, через nPageSize и iNumPage).

  • Используйте агентов (CAgent::AddAgent), чтобы избежать таймаута.

3. Восстановление

  • Если что-то пошло не так, восстановите данные из резервной копии.

  • Убедитесь, что бэкап включает не только базу, но и папку /upload/.

Заключение

Массовое удаление изображений в Битрикс через API — мощный инструмент, но требующий осторожности. Всегда тестируйте скрипт на копии сайта и делайте резервные копии перед запуском.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи