Как сделать кастомную страницу-заглушку вместо стандартной
В 1С-Битрикс есть два основных подхода. Рассмотрим оба.
Способ 1. Стандартный (только текст, простая заглушка)
Этот способ подходит, если вам нужно просто вывести текстовое сообщение.
- Перейдите в административном разделе: Настройки → Настройки продукта → Настройки модулей → Главный модуль.
- Включите опцию «Закрыть сайт для посетителей».
- В поле ниже укажите текстовое сообщение, которое увидят посетители.
Однако это будет просто текст, а не полноценная HTML-страница с дизайном. Для красивой страницы-заглушки используйте Способ 2.
Способ 2. Программный (полноценная HTML-заглушка, рекомендую)
Этот способ позволяет вывести любую вёрстку для всех неавторизованных пользователей (кроме администраторов). Реализуется через событие OnBeforeProlog.
-
Создайте файл заглушки, например:
/coming-soon/underconstruction.html— с вашей вёрсткой, логотипом, счётчиками и т.д. -
Создайте или отредактируйте файл
/bitrix/php_interface/{ID_САЙТА}/init.php(например,/bitrix/php_interface/s1/init.phpдля сайта с IDs1) и добавьте туда код:<?php AddEventHandler("main", "OnBeforeProlog", "MySiteClosedHandler", 50); function MySiteClosedHandler() { global $USER; if (!is_object($USER)) { $USER = new CUser(); } // Если пользователь не администратор — показываем заглушку if (!$USER->IsAdmin()) { include($_SERVER["DOCUMENT_ROOT"] . "/coming-soon/underconstruction.html"); die(); } } -
Готово! Все посетители, кроме администраторов, будут видеть вашу страницу-заглушку. Администраторы (ID группы 1) увидят сайт в обычном режиме.
Если нужно закрыть только один сайт из нескольких
В настройках Главного модуля опция «Закрыть сайт для посетителей» закрывает сразу все сайты. Чтобы закрыть только один, используйте Способ 2, предварительно проверив ID сайта через константу SITE_ID:
<?php
AddEventHandler("main", "OnBeforeProlog", "MySiteClosedHandler", 50);
function MySiteClosedHandler()
{
global $USER;
if (!is_object($USER))
{
$USER = new CUser();
}
// Закрываем только сайт с ID = 's1'
if (SITE_ID === 's1' && !$USER->IsAdmin())
{
include($_SERVER["DOCUMENT_ROOT"] . "/coming-soon/underconstruction.html");
die();
}
}
Важно: такой способ (с die() в обработчике) отключает выполнение заданий cron для сайта. Если сайт использует cron, рассмотрите вариант через настройки веб-сервера (например, .htaccess редирект)