Отложенная публикация позволяет заранее подготовить новость или страницу и автоматически показать её в нужный момент, а затем скрыть по истечении срока. В 1С-Битрикс это работает через поля активности элементов инфоблока и систему агентов.
CIBlock::DeactivateElement.Как устроена публикация по расписанию
В 1С-Битрикс отдельного «планировщика постов» нет — публикацией по времени управляют два поля активности у каждого элемента инфоблока:
- Начало активности (
ACTIVE_FROM, в старых версияхDATE_ACTIVE_FROM) — дата и время, начиная с которого элемент считается активным. - Окончание активности (
ACTIVE_TO,DATE_ACTIVE_TO) — дата и время, после которого элемент перестаёт быть активным.
Логика такая: компонент вывода (список новостей, каталог) при выборке отсекает элементы, которые ещё не начали или уже закончили действовать. То есть для посетителя материал «появляется» и «исчезает» сам, если компонент настроен учитывать даты активности.
Важно различать два уровня:
- Флаг «Активность» элемента (
ACTIVE = Y/N) — жёсткое включение/выключение. - Диапазон активности по времени — мягкое ограничение, которое учитывается при выводе и при работе агента деактивации.
Отложенная публикация: включить материал в нужный момент
Чтобы новость опубликовалась автоматически в заданное время:
- Откройте Контент → (ваш инфоблок) → Добавить элемент.
- Подготовьте текст, заголовок и картинки как обычно.
- На вкладке «Анонс» установите флаг «Активность» в положение включено.
- В поле «Начало активности» укажите будущую дату и время публикации, например
10.07.2026 09:00:00. - Сохраните элемент.
До наступления указанного времени элемент существует в базе, но компонент вывода его не показывает, потому что текущая дата меньше «Начала активности». Как только время наступит, материал появится на сайте без ручного вмешательства — при условии, что кэш компонента обновится (см. раздел про кэш).
Ключевой момент: в настройках компонента (например, news.list или news.detail) должен быть включён параметр «Учитывать дату окончания активности» и корректно работать фильтр по дате начала. По умолчанию штатные комплексные компоненты новостей это учитывают.
Снятие с публикации по расписанию
Автоматическое скрытие материала настраивается аналогично — через поле «Окончание активности»:
- Откройте элемент на редактирование, вкладка «Анонс».
- В поле «Окончание активности» задайте дату и время, когда материал должен исчезнуть, например срок акции
31.07.2026 23:59:00. - Сохраните.
После наступления этой даты возможны два сценария:
- Мягкое скрытие. Компонент вывода сам перестаёт показывать элемент, так как дата окончания прошла. Флаг
ACTIVEпри этом остаётсяY. - Жёсткая деактивация. Системный агент
CIBlock::DeactivateElement()периодически проходит по инфоблокам и выставляетACTIVE = Nэлементам, у которых окончание активности уже прошло. После этого элемент считается полностью неактивным.
Жёсткая деактивация полезна тем, что «протухший» элемент перестаёт попадать в любые выборки, даже если конкретный компонент не проверяет даты.
Агенты и cron: что реально запускает деактивацию
Автоматическое снятие с публикации выполняет агент — фоновая задача Битрикс. Список агентов находится в разделе Настройки → Настройки продукта → Агенты (bitrix/admin/agent_list.php). Там вы увидите агент модуля iblock с функцией CIBlock::DeactivateElement().
Агенты в Битрикс могут запускаться двумя способами:
| Способ запуска | Как работает | Точность по времени |
|---|---|---|
| На хитах | Агент выполняется при обращении посетителя к сайту | Низкая — зависит от трафика |
| Через cron | Скрипт /bitrix/php_interface/cron_events.php запускается планировщиком ОС | Высокая — по расписанию cron |
Для точной публикации и снятия с публикации настоятельно рекомендуется cron. При запуске «на хитах» на низкопосещаемом сайте агент может отработать с большой задержкой, и материал снимется не в 23:59, а гораздо позже — при следующем визите пользователя.
Чтобы перевести агенты на cron, в файле /bitrix/php_interface/dbconn.php задают константу:
define("BX_CRONT_SUPPORT", true);
и добавляют в crontab сервера регулярный вызов cron_events.php, например раз в минуту.
Кэширование: почему материал не появился вовремя
Даже при правильно заданных датах материал может отобразиться с опозданием из-за кэша компонентов. Битрикс кэширует результат выборки, и пока кэш «живой», новые условия по датам не пересчитываются.
Что учесть:
- Комплексные компоненты новостей поддерживают автоматическое сбрасывание кэша при изменении элементов — включите его в настройках компонента.
- Время жизни кэша (например, 3600 секунд) стоит соотнести с требуемой точностью публикации. Если нужна минутная точность, длинный кэш помешает.
- Для страниц, где важна публикация точно по времени, можно управлять кэшем компонента с учётом даты начала активности или сокращать TTL.
После наступления даты публикации элемент попадёт в выборку при первом пересчёте кэша. Если кэш сбрасывается по расписанию или по событию — материал появится корректно.
Частые ошибки
Типичные причины, по которым публикация по расписанию «не срабатывает»:
- Часовой пояс сервера не совпадает с ожидаемым. Даты активности хранятся по времени сервера. Проверьте настройку зоны в Настройки → Настройки продукта → Настройки модулей → Главный модуль и в PHP.
- Флаг «Активность» выключен. Даже с корректными датами элемент с
ACTIVE = Nникогда не покажется. Даты действуют только для активных элементов. - Агенты не запускаются. На сайте без посетителей и без cron агент деактивации может не отрабатывать сутками. Настройте cron.
- Компонент не учитывает даты. Самописный или неправильно настроенный компонент выбирает элементы без фильтра по
ACTIVE_FROM/ACTIVE_TO. - Долгий кэш. Материал есть в базе, но компонент отдаёт старый кэшированный список. Включите сброс кэша по изменению или уменьшите TTL.
- Дата в прошлом при копировании. При дублировании элемента забытая старая дата окончания сразу делает копию неактивной.
Итог
Публикация и снятие с публикации по расписанию в 1С-Битрикс строятся на трёх составляющих:
- Поля «Начало активности» и «Окончание активности» на вкладке «Анонс» элемента.
- Работающие агенты (в первую очередь
CIBlock::DeactivateElement), запускаемые через cron для точности по времени. - Корректная настройка кэша компонентов вывода.
Если все три условия выполнены, редактор может заранее готовить материалы, а сайт сам будет показывать и скрывать их в нужные моменты — без ночных дежурств и ручного нажатия кнопки «Опубликовать».