Автоматизируем рутинные операции в CMS Bitrix
Сегодня рассмотрим код, в котором, с использованием API CMS Bitrix, выполним рутинную работу буквально в несколько строк
Столкнулись с одной задачей: нужно удалить неактивные товары (элементы инфоблока) и вместе с ними фотографии: превью и детальные.
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
$arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM", "PREVIEW_PICTURE", "DETAIL_PICTURE");
$arFilter = Array("IBLOCK_ID"=>"16", "ACTIVE"=>"N");
if (CModule::IncludeModule("iblock")) {
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize" => 50), $arSelect);
while ($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
if(CIBlockElement::Delete($arFields["ID"])){
if($arFields["PREVIEW_PICTURE"]){
CFile::Delete($arFields["PREVIEW_PICTURE"]);
}
if($arFields["DETAIL_PICTURE"]){
CFile::Delete($arFields["DETAIL_PICTURE"]);
}
}
}
}
Первым делом подключаем:
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
prolog_before.php подключает все необходимые файлы.
Объявим массивы, в которых укажем поля, которые мы ищем $arSelect
и по каким параметрами ищем $arFilter
.
$arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM", "PREVIEW_PICTURE", "DETAIL_PICTURE");
$arFilter = Array("IBLOCK_ID"=>"16", "ACTIVE"=>"N");
В нашем случае это следующие условия: инфоблок с id 16 и элементы не активны.
if (CModule::IncludeModule("iblock"))
Подключаем модуль инфоблоков.
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize" => 50), $arSelect);
Запишем в переменную, то что получим. А получим объект.
Проходим циклом.
while ($ob = $res->GetNextElement()) {}
Получаем поля элементов и записываем их.
$arFields = $ob->GetFields();
Удаляем элемент инфоблока по его ID и проверяем.
if(CIBlockElement::Delete($arFields["ID"])) {}
Если всё ок, то удаляем фотографии. Методом CFile::Delete
, передавая аргументом id фото. Удаляются они физически и из БД.
if($arFields["PREVIEW_PICTURE"]){
CFile::Delete($arFields["PREVIEW_PICTURE"]);
}
if($arFields["DETAIL_PICTURE"]){
CFile::Delete($arFields["DETAIL_PICTURE"]);
}
Данный код можно разместить в php файле и запустить его. Создавать модуль нет необходимости.
Вот так. Средствам Битрикс мы решили поставленную задачу автоматизированно.
Материал подготовлен автором @zheev