Подключение CSS и JavaScript в 1С-Битрикс: правильные подходы

Содержание

При разработке или кастомизации сайта на 1С-Битрикс часто возникает необходимость подключить собственные стили (CSS) и скрипты (JavaScript). Это может быть как частью нового дизайна, так и интеграцией сторонних библиотек (например, jQuery, Swiper, или аналитических скриптов). В этой статье мы подробно рассмотрим правильные и эффективные способы подключения CSS и JS файлов к шаблону сайта в 1С-Битрикс, с учётом рекомендаций фреймворка.

📁 .css и .js — где их хранить?

Прежде чем подключать файлы, важно понимать, где их разместить:

Для шаблона сайта:

Все ресурсы обычно кладутся в папку шаблона:

/local/templates/ваш_шаблон/assets/css/
/local/templates/ваш_шаблон/assets/js/

Для компонентов:

Если файлы относятся только к конкретному компоненту, их можно поместить внутрь папки компонента:

/local/components/ваш_компонент/templates/.default/

💡 Рекомендация: Используйте структуру с папками assets/css, assets/js внутри шаблона — это упрощает поддержку проекта.


🛠 Способ 1: Подключение через $APPLICATION->SetAdditionalCSS() и $APPLICATION->AddHeadScript()

Это классический способ, который работает на всех версиях Битрикс.

Пример подключения CSS:

<?php
$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH . "/assets/css/custom.css");
?>

Пример подключения JS:

<?php
$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH . "/assets/js/custom.js");
?>

⚠️ Важно: Эти методы добавляют файлы в <head> страницы. Для больших скриптов лучше использовать отложенную загрузку (см. ниже).


🚀 Способ 2: Использование Asset API (начиная с версии Битрикс 20.0.0)

Начиная с обновления D7-фреймворка, в Битрикс появился современный механизм управления ресурсами — Asset API. Он позволяет не только подключать файлы, но и управлять зависимостями, версиями и порядком загрузки.

Подключение CSS через Asset:

<?php
use Bitrix\Main\Page\Asset;

Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . "/assets/css/style.css");
?>

Подключение JS:

<?php
use Bitrix\Main\Page\Asset;

Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/assets/js/script.js");
?>

✅ Преимущества Asset API:

  • Автоматическое объединение и минификация (при включённой оптимизации)

  • Управление зависимостями

  • Возможность указать позицию (BEFORE_CSS, AFTER_JS, и т.д.)

Пример с позиционированием:

<?php
use Bitrix\Main\Page\Asset;

Asset::getInstance()->addString(
    '<script src="' . SITE_TEMPLATE_PATH . '/assets/js/lazy.js" defer></script>',
    false,
    AssetLocation::BEFORE_JS
);
?>

⚠️ Способ 3: Подключение в header.php напрямую (не рекомендуется)

Можно просто вставить <link> и <script> в header.php шаблона:

<link rel="stylesheet" href="<?= SITE_TEMPLATE_PATH ?>/assets/css/style.css">
<script src="<?= SITE_TEMPLATE_PATH ?>/assets/js/script.js"></script>

❌ Почему это не лучший подход?

  1. Нарушается архитектура Битрикс

  2. Нет контроля над дублированием (если файл подключится дважды — будут ошибки)

  3. Не участвует в механизмах оптимизации (объединение, сжатие)

🛑 Используйте этот способ только для быстрого тестирования.


🎯 Как избежать дублирования подключений?

Если вы подключаете один и тот же файл из нескольких компонентов или областей сайта, используйте проверку:

<?php
if (!defined('MY_CUSTOM_SCRIPT_LOADED')) {
    define('MY_CUSTOM_SCRIPT_LOADED', true);
    $APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH . "/assets/js/custom.js");
}
?>

Или воспользуйтесь встроенными возможностями Asset API — он автоматически исключает дубли при одинаковых путях.


💡 Дополнительные советы

Версионирование файлов

Чтобы избежать проблем с кэшированием, добавляйте параметр версии:

<?php
Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . "/assets/css/style.css?v=1.0.2");
?>

Условное подключение

Подключайте ресурсы только на нужных страницах:

<?php
if ($APPLICATION->GetCurPage() == '/catalog/') {
    Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . "/assets/css/catalog.css");
}
?>

Используйте HTTPS-пути

Убедитесь, что SITE_TEMPLATE_PATH возвращает корректный протокол (особенно если сайт работает по HTTPS).


📊 Сравнение методов

Метод Версии Битрикс Оптимизация Рекомендация
$APPLICATION->SetAdditionalCSS() Все Нет Для legacy-проектов
$APPLICATION->AddHeadScript() Все Нет Для legacy-проектов
Asset API 20.0.0+ Да Рекомендуемый подход
Прямое подключение Все Нет Только для тестирования

🎨 Практический пример правильного подключения

<?php
// В начале файла шаблона (например, в header.php)
use Bitrix\Main\Page\Asset;

// Подключаем основные стили
Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . "/assets/css/main.css?v=1.2.0");

// Подключаем библиотеки с зависимостями
Asset::getInstance()->addJs("https://code.jquery.com/jquery-3.6.0.min.js");

// Подключаем кастомные скрипты с отложенной загрузкой
Asset::getInstance()->addString(
    '<script src="' . SITE_TEMPLATE_PATH . '/assets/js/app.js" defer></script>',
    false,
    \Bitrix\Main\Page\AssetLocation::BEFORE_JS
);

// Условное подключение для конкретной страницы
if (strpos($APPLICATION->GetCurPage(), '/blog/') !== false) {
    Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . "/assets/css/blog.css");
}
?>

📝 Заключение

Правильное подключение CSS и JavaScript в 1С-Битрикс — это не просто вставка ссылок, а использование встроенных механизмов платформы. Asset API — современный и гибкий инструмент, который обеспечивает:

  • Чистоту кода

  • Производительность

  • Совместимость

Избегайте «ручного» подключения в HTML, если только вы не делаете временный прототип.

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

Комментарии
Оставить комментарий
Form comments
Еще больше о нас и нашей деятельности
Послушать подкасты в аудиоформате: Wave, Podcasts.apple, Яндекс, Звук

Ещё больше крутых статей — в нашем Telegram-канале. Подписывайтесь, чтобы быть в курсе всех событий!