Как получить название шаблона и путь к нему для сайта в 1С-Битрикс

Рассматриваем вариант, когда требуется получить название или путь к шаблону сайта без использования констант, типа SITE_TEMPLATE_PATH, к примеру, из административной части.

Получение название шаблона и пути для сайта

В Битриксе можно узнать, какой шаблон сайта используется для конкретного SITE_ID, с помощью API, например, через вызов метода CSite::GetByID. Этот метод позволяет получить данные о сайте, включая информацию о текущем используемом шаблоне.

Получаем название шаблона для текущего сайта

Пример кода для получения шаблонов сайта:

<?php
// Подключаем библиотеку Битрикса
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

// Задаем SITE_ID (например, 's1')
$siteId = 's1';

// Получаем данные о сайте
$rsSite = CSite::GetByID($siteId);
if ($arSite = $rsSite->Fetch()) {
    // Выводим шаблоны, которые используются на данном сайте
    echo "Шаблоны, привязанные к сайту {$siteId}:<br>";

    // Список шаблонов сайта
    $arTemplates = CSite::GetTemplateList($siteId);
    while ($arTemplate = $arTemplates->Fetch()) {
        echo "Шаблон: " . $arTemplate["TEMPLATE"] . "<br>";
        echo "Условие: " . $arTemplate["CONDITION"] . "<br><br>";
    }
} else {
    echo "Сайт с SITE_ID {$siteId} не найден.";
}
?>

Что происходит в коде:

  1. Сначала через метод CSite::GetByID($siteId) получаем основную информацию о сайте с указанным SITE_ID.
  2. Для получения списка шаблонов сайта используется метод CSite::GetTemplateList($siteId), который возвращает массив с шаблонами и соответствующими условиями их применения.
  3. Поле TEMPLATE указывает на код шаблона (например, my_template), а поле CONDITION определяет, при каких условиях этот шаблон применяется (например, для определённой директории или страницы).

Полезные пояснения:

  • Основной шаблон: Если для CONDITION пусто (""), то это основной шаблон, который используется на всем сайте.
  • Шаблоны с условиями: Шаблоны с заполненным полем CONDITION применяются только в определённой части сайта, если условия для них выполнены.

Варианты использования:

Этот код поможет, например, для диагностирования, какой шаблон и где применяется, а также для настройки или отладки темы сайта.

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

Получаем название шаблона для текущего сайта и путь к нему

Чтобы узнать не только название шаблона, но и путь, где он находится, можно выполнить дополнительную проверку с помощью структуры папок и стандартных функций PHP. В Битриксе шаблоны расположены в директории /bitrix/templates, либо, в случае кастомных решений, в /local/templates. Комбинируя имя шаблона с этими путями, мы можем получить полный путь к директории шаблона.

Вот пример кода, который выводит как название шаблона, так и путь к нему:

<?php
// Подключаем ядро Битрикс
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

// Указываем SITE_ID (например, 's1')
$siteId = 's1';

// Получаем данные о сайте
$rsSite = CSite::GetByID($siteId);
if ($arSite = $rsSite->Fetch()) {
    echo "Шаблоны, привязанные к сайту {$siteId}:<br>";

    // Получаем список шаблонов, связанных с данным сайтом
    $arTemplates = CSite::GetTemplateList($siteId);
    while ($arTemplate = $arTemplates->Fetch()) {
        $templateName = $arTemplate['TEMPLATE'];

        // Проверяем путь к шаблону (возможны пути в /local/templates или в /bitrix/templates)
        $templatePathLocal = $_SERVER['DOCUMENT_ROOT'] . '/local/templates/' . $templateName;
        $templatePathBitrix = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/templates/' . $templateName;

        // Определяем реальный путь к шаблону
        if (file_exists($templatePathLocal)) {
            $realTemplatePath = $templatePathLocal;
        } elseif (file_exists($templatePathBitrix)) {
            $realTemplatePath = $templatePathBitrix;
        } else {
            $realTemplatePath = "Шаблон не найден.";
        }

        // Выводим данные
        echo "Шаблон: {$templateName}<br>";
        echo "Условие: {$arTemplate['CONDITION']}<br>";
        echo "Путь: {$realTemplatePath}<br><br>";
    }
} else {
    echo "Сайт с SITE_ID {$siteId} не найден.";
}
?>

Разбор кода:

  1. CSite::GetTemplateList($siteId): возвращает список шаблонов, связанных с указанным сайтом, включая их названия и условия активации.
  2. Проверяется существование шаблона в каталоге /local/templates ($templatePathLocal) и в каталоге /bitrix/templates ($templatePathBitrix).
  3. Если шаблон существует в одной из директорий, возвращается полный путь к нему.
  4. Если шаблон не найден ни в /local/templates, ни в /bitrix/templates, выводится сообщение "Шаблон не найден".

Результат работы:

Для каждого шаблона сайт будет показывать следующую информацию:

  • Название шаблона.
  • Условие его применения (поле CONDITION для точной настройки в зависимости от страниц).
  • Абсолютный путь к директории шаблона в файловой системе.

Примечание

Пути шаблонов по умолчанию могут изменяться, если сайт настроен нестандартно (например, используются собственные пути через уровни абстракции). Если шаблон находится за пределами стандартных директорий /bitrix/templates или /local/templates, это нужно учитывать дополнительно.

Теги:  Битрикс, рецепты

Интернет-магазин от 120 000 руб., срок от 4 недель

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

Корпоративный сайт от 60 000 руб., срок от 3 недель

Готовый информационный ресурс, включающий лицензию на 1С-Битрикс «Стандарт», технологию «Композитный сайт».

Лендинг от 25 000 руб., срок от 2 недель

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