Только один активный элемент в инфоблоке

Внимание! Раздел находится в стадии разработки. Комментарии временно недоступны
Страницы: 1
RSS
Только один активный элемент в инфоблоке
Единственный активный элемент в инфоблоке: автодеактивация баннера в 1С-Битрикс

Иногда на сайте нужен небольшой, но «громкий» поп-ап, который появляется  на каждой странице и сообщает о важной акции, доставке или  cookie-политике.
Через использование функции, оставляем активным только самый новый по 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-Битрикс

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.

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

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

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

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

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

Перенос сайтов на «1С-Битрикс»

сайты на платформе «1С-Битрикс» — это удобство, надежность и высокая посещаемость

от 12 000 рублей
Перенос сайтов с любых CMS и статичных страниц на платформу «1С-Битрикс», с учетом дизайна, верстки и урл-адресов. С сохранением всей информации и структуры сайта.

* зависит от объема выполняемых работ.