Свои скрипты и стили
Где размещать доработки внешнего вида и поведения, чтобы они не потерялись при обновлении модуля и синхронизации шаблона.
Что сохраняется при обновлении
Синхронизация шаблона (кнопка в настройках или автообновление) копирует шаблон из модуля в /bitrix/templates/skyshop/ поверх существующего. Исключение — два файла, которые остаются как есть: assets/css/custom.css и assets/js/custom.js.
| Где | Переживает обновление | Для чего |
|---|---|---|
/bitrix/templates/skyshop/assets/css/custom.css | Да | Свои стили и переопределение стилей шаблона |
/bitrix/templates/skyshop/assets/js/custom.js | Да | Свои скрипты, подписки на JS-события |
| Настройки → вкладка «Счётчики» | Да | Сторонний код: аналитика, чаты, коллтрекинг |
/include/variables.php в корне сайта | Да | Размеры картинок и адреса служебных страниц |
Папка /local/ | Да | PHP-обработчики, свои файлы, шаблоны компонентов |
Остальные файлы /bitrix/templates/skyshop/ | Нет | Не правьте их — изменения сотрутся при синхронизации |
custom.css — свои стили
Файл подключается после всех стилей шаблона — основного main.css, стилей выбранной шапки, праздничных декораций и эффекта стекла, — поэтому его правила перекрывают стандартные при той же специфичности селекторов.
/* your custom styles */
/* крупнее заголовок у плиток категорий */
.category-card__title {
font-size: 113%;
}
/* стили только для ночной темы */
.night-theme .header__logo img {
filter: invert(1);
}Для ночной темы у <body> появляется класс night-theme — используйте его в селекторах, как в примере.
CSS-переменные темы
Цвета, шрифт, скругления и размеры, выбранные в настройках, шаблон выводит CSS-переменными на :root в теге <style data-skyshoptheme>. Этот тег стоит в коде страницы после custom.css, поэтому простое правило :root { … } из custom.css не сработает. Повысьте специфичность селектора:
html:root {
--theme-color: #6675f5;
--card-border-radius: 24px;
}| Переменная | Что задаёт |
|---|---|
--theme-color | Основной цвет: кнопки, ссылки, активные элементы |
--black, --white, --gray…--gray4 | Текст, фоны и оттенки серого |
--red, --green, --blue, --yellow | Ошибки, успех, акценты |
--footer-color | Фон подвала |
--main-font, --main-font-size, --font-weight, --font-weight-bold | Шрифт, размер и жирность текста |
--border-radius, --card-border-radius, --main-border-radius, --small-border-radius | Скругления элементов, карточек, блоков |
--container-width | Максимальная ширина контента |
--input-height, --button-height | Высота полей и кнопок |
--block-margin | Отступ между блоками |
--theme-color, и контент-менеджер сможет поменять цвет без программиста. Переопределяйте переменные в CSS, только если нужного варианта в настройках нет.custom.js — свои скрипты
Файл подключается последним, после библиотек и main.js: в нём уже доступны jQuery ($), EventHandler, PopupHandler и другие объекты шаблона. Здесь удобно подписываться на JS-события.
//custom scripts
EventHandler.register(['MainHandler', 'initScripts'], function (params) {
// инициализация своих элементов — и при загрузке, и в подгруженном контенте
params.parent.find('[data-my-widget]').each(function () {
// ...
});
});Скрипты шаблона выводятся в конце страницы, поэтому код, который зависит от них, не вставляйте встроенным <script> в контент страницы — пишите его в custom.js.
Отдельные файлы в /local
Если доработок много, держите их в отдельных файлах в папке /local/ и подключайте через Asset в init.php:
<?php
use Bitrix\Main\EventManager;
use Bitrix\Main\Page\Asset;
EventManager::getInstance()->addEventHandler('main', 'OnBeforeProlog', function () {
if (defined('ADMIN_SECTION') || !defined('SITE_TEMPLATE_ID') || SITE_TEMPLATE_ID !== 'skyshop') {
return;
}
$asset = Asset::getInstance();
$asset->addCss('/local/assets/shop.css');
$asset->addJs('/local/assets/shop.js');
});Порядок подключения таких файлов относительно скриптов шаблона не гарантирован. Оборачивайте код, который использует объекты шаблона, в DOMContentLoaded — к этому моменту все скрипты страницы уже загружены:
document.addEventListener('DOMContentLoaded', function () {
EventHandler.register(['FormHandler', 'action'], function (params) {
// ...
});
});Стили из такого файла могут оказаться в коде страницы раньше стилей шаблона — если правило не применяется, повысьте специфичность селектора или перенесите его в custom.css.
Сторонний код без правки файлов
Код виджетов и сервисов — онлайн-чатов, коллтрекинга, пикселей — можно вставить прямо в настройках, без доступа к файлам:
- «Счётчики в начале страницы» — код выводится внутри
<head>. - «Счётчики в конце страницы» — код выводится в конце страницы.
Код выводится как есть, без обработки, — проверяйте сайт после сохранения. Подробнее — в разделе «Счётчики».
Переменные шаблона: /include/variables.php
Файл /include/variables.php в корне сайта переопределяет служебные значения шаблона: размеры, до которых уменьшаются картинки, заглушку для товаров без фото и адреса служебных страниц. Файл возвращает массив с ключами default и url; указывайте только то, что хотите изменить.
<?php
return [
'default' => [
// обычный размер уменьшенных картинок (по умолчанию 650×650)
'resize_width' => 800,
'resize_height' => 800,
],
'url' => [
// корзина лежит по другому адресу
'cart' => SITE_DIR . 'basket/',
],
];| Ключ | Значение по умолчанию |
|---|---|
default → resize_width, resize_height | 650 × 650 — размер по умолчанию для уменьшенных картинок |
default → resize_big_width, resize_big_height | 1000 × 1000 — крупные картинки |
default → resize_small_width, resize_small_height | 100 × 100 — миниатюры |
default → resize_exact, resize_big_exact, resize_small_exact | false — пропорциональное уменьшение; true — обрезка точно по размеру |
default → nophoto | Картинка-заглушка для товаров без фото |
url → cart, order, personal, orders, favorite, compare, profiles, contacts, search | Адреса корзины, оформления заказа, личного кабинета, избранного, сравнения, контактов и поиска |
Изменение шаблонов компонентов
Если доработку нельзя сделать стилями, скриптами или PHP-событиями, шаблон компонента можно переопределить, не трогая файлы SkyShop. «Битрикс» ищет шаблоны компонентов сначала в /local/templates/, а затем в /bitrix/templates/.
- Скопируйте папку шаблона компонента из
/bitrix/templates/skyshop/components/…в такой же путь внутри/local/templates/skyshop/components/…. Например:/local/templates/skyshop/components/bitrix/news.list/banner/. - Правьте копию — сайт будет использовать её вместо стандартной.
- Сбросьте кеш, чтобы изменения появились на сайте.
/bitrix/templates/skyshop/. Поэтому сначала проверьте, нельзя ли решить задачу событием onAfterTemplateModify или точками вывода onContent….