Поделиться с друзьями
10 мая 2020
40

Чем этот мануал отличается от остальных?

Да тем, что нигде не описано, как сделать заглушку динамической, для многосайтовости, средствами PHP, а не HTML, при этом, чтобы у каждого из сайтов была своя заглушка

У 1С-Битрикс есть инструкция Как закрыть только один из сайтов для посещения пользователей, но если у тебя уже проработана заглушка на PHP или, что еще пикантнее - разработан шаблон Landing Page под заглушку, то все попытки сводятся к выводу белого экрана. Но решение все таки есть!

Шаг 1. Воспользуемся инструкцией Битрикса

Закрываем публичную часть для посещения: Настройки > Настройки продукта > Настройки модулей > Главный модуль > Закрыть доступ для посетителей

Для того чтобы закрыть отдельный сайт в рамках многосайтовой конфигурации, необходимо разместить специальный программный код в файле: /bitrix/php_interface/siteid/init.php

AddEventHandler("main", "OnBeforeProlog", "MyOnBeforePrologHandler", 50);
function MyOnBeforePrologHandler()
{
   global $USER;
   if(!is_object($USER)){
      $USER = new CUser();
   }
   if (!$USER->IsAdmin()){
      include($_SERVER["DOCUMENT_ROOT"]."/site_closed.php");
      die();
   }
}

где siteid - идентификатор сайта, который нужно закрыть.

Шаг 2. Создаем необходимые файлы и подключаем их

В корне сайта создаем файл site_closed.php и подключаем в нем header.php и footer.php:

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php");

Воспользовавшись инструкцией 1С-Битрикс и не прописав данные строчки - выводится белый экран.

Затем в каталоге/bitrix/php_interface/siteID/ создаем файл site_closed.php

site_closed.php:

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/templates/MY_TEMPLATE/header.php");
$APPLICATION->SetTitle("MY TITLE");

$APPLICATION->IncludeComponent(
    "bitrix:news.detail",
    ".default",
    array(
        "COMPONENT_TEMPLATE" => "default",
        "IBLOCK_TYPE" => "ox8_landing",
        "IBLOCK_ID" => "102",
        "ELEMENT_ID" => "3864",
        "ELEMENT_CODE" => "",
        "CHECK_DATES" => "Y",
        "FIELD_CODE" => array(
            0 => "NAME",
            1 => "PREVIEW_PICTURE",
            2 => "",
        ),
        "PROPERTY_CODE" => array(
            0 => "IMAGE_POSITION",
            1 => "BUTTON_URL",
            2 => "BUTTON_TEXT",
            3 => "BUTTON_TYPE",
            4 => "COLOR_CIRCLE",
            5 => "",
        ),
        "IBLOCK_URL" => "",
        "DETAIL_URL" => "",
        "AJAX_MODE" => "N",
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "AJAX_OPTION_HISTORY" => "N",
        "AJAX_OPTION_ADDITIONAL" => "",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "36000000",
        "CACHE_GROUPS" => "Y",
        "SET_TITLE" => "N",
        "SET_CANONICAL_URL" => "N",
        "SET_BROWSER_TITLE" => "N",
        "BROWSER_TITLE" => "-",
        "SET_META_KEYWORDS" => "N",
        "META_KEYWORDS" => "-",
        "SET_META_DESCRIPTION" => "N",
        "META_DESCRIPTION" => "-",
        "SET_LAST_MODIFIED" => "N",
        "INCLUDE_IBLOCK_INTO_CHAIN" => "N",
        "ADD_SECTIONS_CHAIN" => "N",
        "ADD_ELEMENT_CHAIN" => "N",
        "ACTIVE_DATE_FORMAT" => "d.m.Y",
        "USE_PERMISSIONS" => "N",
        "STRICT_SECTION_CHECK" => "N",
        "DISPLAY_DATE" => "Y",
        "DISPLAY_NAME" => "Y",
        "DISPLAY_PICTURE" => "Y",
        "DISPLAY_PREVIEW_TEXT" => "Y",
        "PAGER_TEMPLATE" => ".default",
        "DISPLAY_TOP_PAGER" => "N",
        "DISPLAY_BOTTOM_PAGER" => "Y",
        "PAGER_TITLE" => "Страница",
        "PAGER_SHOW_ALL" => "N",
        "PAGER_BASE_LINK_ENABLE" => "N",
        "SET_STATUS_404" => "N",
        "SHOW_404" => "N",
        "MESSAGE_404" => "",
        "TEMPLATE_THEME" => "red",
        "MEDIA_PROPERTY" => "",
        "SLIDER_PROPERTY" => "",
        "USE_SHARE" => "N"
    ),
    false
);

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/templates/MY_TEMPLATE/footer.php");
CHTTP::SetStatus("503 Service Unavailable");

Итак, сначала мы подключаем header нашего шаблона и устанавливаем красивый и понятный title страницы, затем подключаем все компоненты и весь код, которые должны были быть в index.php (в моем случае только компонент bitrix:news.detail), далее подключаем footer шаблона и устанавливаем для поисковиков статус недоступности страницы, чтобы она не попала в индекс CHTTP::SetStatus("503 Service Unavailable");

Шаг 3. Тестируем

  • Проверяем, чтобы публичная часть была закрыта
  • Переходим на сайт №1, тестируем верстку, тестируем кнопки, тестируем формы
  • Переходим на сайт №2, тестируем верстку, тестируем кнопки, тестируем формы

Проведенные нами манипуляции дают практически неограниченные возможности по кастомизации заглушек, т.к. можно к ним подключить и компоненты меню, и формы обратной связи, и демо каталог товаров, и фотогалерею, и слайдер, и т.д. А так же позволяют команде разработчиков, не отрываясь от процесса, программировать функционал твоего нового сайта используя все прелести административной части.

Вот какая заглушка получилась у меня:

Кастомная страница заглушка
Позвоните нам!
Личный кабинет
Вам будет доступна история заказов, управление рассылками, свои цены и скидки для постоянных клиентов и прочее.
Ваш логин
Ваш пароль
Работаем для вас с 10:00 до 17:00
Для ТЗ
Интернет-магазины на 1С-Битрикс и Telegram боты для всей России