Битрикс – как удалить все картинки анонса и детальные при помощи 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 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

2 коментаря

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *