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

Удаляем все изображения анонса и детальные запустив небольшой скрипт.

Как в товарах удалить все фото — Битрикс

ВАЖНО — данный скрипт можно отнести к критичным, а это значит, что информацию можно будет вернуть только из копии. Перед запуском вы должны сделать резервную копию, и четко понимать что дальше будет происходить. В целом, на копии вашего сайта я бы и посоветовал практиковаться 🙂

Немного вводной информации. Использовать будем CIBlockElement::GetList и небольшой трюк связанный с ‘del’ => ‘Y’. Для обновления элемента инфоблока будет использован $el->Update.

Если вам кажется, что Update можно использовать для обновления свойств инфоблока (например, в тех же выгрузках), то знайте — это очень плохая идея и вот почему:

Если массив PROPERTY_VALUES задан, то он должен содержать полный набор значений свойств для данного элемента, т.е. если в нем будет отсутствовать одно из свойств, то все его значения для данного элемента будут удалены.

Но это уже как говорится тема отдельного разговора. Приступим?

Перейдем к коду, и далее немного объясню что происходит:

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if (CModule::IncludeModule("iblock")):
	$IBLOCK_ID = 1;
	$arLoadProductArray = Array(
		"PREVIEW_PICTURE" => array('del' => 'Y'),
		"DETAIL_PICTURE" => array('del' => 'Y'),
	);
	$res = CIBlockElement::GetList (
		Array("ID" => "ASC"),
		Array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"),
		false,
		false,
		Array('ID', 'NAME')
	);
	while ($arItem = $res->GetNext()) {
		$el = new CIBlockElement;
		$PRODUCT_ID = $arItem['ID'];
		$resU = $el->Update($PRODUCT_ID, $arLoadProductArray);
		unset($el);
	}
endif;

$IBLOCK_ID — тут всё понятно, id нужного нам информационного блока.
«ACTIVE» => «Y» — смотрим изображения только в активных элементах (товарах, новостях — нужное подчеркнуть)
$arLoadProductArray — а вот тут и кроется самое интересное. Передав в качестве параметра массив array(‘del’ => ‘Y’) мы полностью удалим изображения из элемента.

Удалятся ли ресайз копии? Скорей всего нет. И именно поэтому, для данной операции рекомендую удалить папку /upload/resize_cache/iblock.

Если у вас на сайте всё сделано правильно, то копии будут созданы заново. Либо на хитах (посещение страницы и просмотр конкретного товара), либо при загрузке новых изображений в базу.

Для варианта «при загрузке изображений в базу» — имеется ввиду настройки инфоблока для создания уменьшенных копий, а также вызов метода CFile::ResizeImageGet.

Вот и всё, надеюсь данная информация была для вас полезной 🙂 .

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

- Создание сайтов на 1С-Битрикс любой сложности
- Вёрстка макетов Figma, Photoshop, Zeplin
- Поддержка проектов на Битриксе
- Разработка нового функционала для сайта
- Парсинг данных
- Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
- Интеграция по API со сторонними сервисами
и многое другое

E-mail: dmitriyribka@gmail.com

2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *