Как сделать так, чтобы в инфоблоке был только один активный элемент в 1С-Битрикс

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Как сделать так, чтобы в инфоблоке был только один активный элемент в 1С-Битрикс
Единственный активный элемент в инфоблоке: автодеактивация баннера в 1С-Битрикс

Иногда на сайте нужен небольшой, но «громкий» поп-ап, который появляется  на каждой странице и сообщает о важной акции, доставке или  cookie-политике.
Изменено: Валерий Макеев - 28.09.2025 14:35:30
Через использование функции, оставляем активным только самый новый по ID элемент в указанном инфоблоке, а все остальные активные элементы — деактивируем, обеспечивая «единственный активный» без ручного управления.
Код
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
\Bitrix\Main\Loader::includeModule('iblock');
use Bitrix\Iblock\ElementTable;

/**
 * Активирует самый свежий элемент в инфоблоке, деактивируя все остальные.
 * @param int $iblockId ID инфоблока
 */
function activateLatestOnly(int $iblockId): void {
    // Находим самый последний элемент по ID
    $latest = ElementTable::getList([
        'select' => ['ID'],
        'filter' => ['=IBLOCK_ID' => $iblockId],
        'order'  => ['ID' => 'DESC'],
        'limit'  => 1,
    ])->fetch();

    if (!$latest) {
        echo "Нет элементов в инфоблоке $iblockId\n";
        return;
    }

    $latestId = (int)$latest['ID'];

    $el = new \CIBlockElement;

    // Активируем последний элемент через официальный API
    if ($el->Update($latestId, ['ACTIVE' => 'Y'])) {
        echo "Элемент ID $latestId успешно активирован.\n";
    } else {
        echo "Ошибка активации элемента ID $latestId: " . implode(', ', $el->LAST_ERROR) . "\n";
        return;
    }

    // Деактивируем все остальные активные элементы
    $others = ElementTable::getList([
        'select' => ['ID'],
        'filter' => [
            '=IBLOCK_ID' => $iblockId,
            '=ACTIVE'    => 'Y',
            '!=ID'       => $latestId
        ]
    ]);

    $deactivatedCount = 0;
    while ($element = $others->fetch()) {
        if ($el->Update($element['ID'], ['ACTIVE' => 'N'])) {
            $deactivatedCount++;
        } else {
            echo "Ошибка деактивации элемента ID {$element['ID']}: " . implode(', ', $el->LAST_ERROR) . "\n";
        }
    }

    echo "Деактивировано элементов: $deactivatedCount\n";
}

// Пример вызова:
// activateLatestOnly(1);

Раскомментируйте последнюю строку для вызова функции
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack

* на основе готовой верстки

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная