Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
6 лет назад

Автоматизируем рутинные операции в 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

13
196.490 GOLOS
На Golos с August 2017
Комментарии (1)
Сортировать по:
Сначала старые