Документация для разработчиков
Темная тема

Внесение изменений в системный шаблон

Внимание! Мы настоятельно рекомендуем ознакомиться сначала с REST-документацией модуля Сайты, чтобы понять как модуль функционирует (тем более REST доступен и в коробочной версии). Данную документацию рассматривайте как подспорье при работе в коробке, когда вам действительно мало функционала REST, или вы хотите детальнее разобраться в API.

Шаблон Сайта24 подключается как в момент редактирования страницы через редактор, так и в публичной части. Внедрение стороннего разработчика в этот шаблон прежде всего чревато тем, что с очередным обновлением модуля изменения будут потеряны.

Вместе с тем система дает достаточно гибкие возможности влияния на шаблон, о них рассказано ниже.

Конфигурационный файл

На помощь приходит конфигурационный файл .config.php, который размещается внутри шаблона /bitrix/templates/landing24. Файл подключается как в момент редактирования, так и на опубликованном сайте и может влиять на поведение шаблона.

Вот как может выглядеть данный файл (актуальную версию массива вы можете найти в методе Bitrix\Landing\Config::getDefaultConfig()):

return [
	'js_core_public' => [
		'landing_core'
	],
	'js_core_edit' => [
		'landing_core'
	],
	'disable_namespace' => [],
	'enable_namespace' => [],
	'public_wrapper_block' => true,
	'google_font' => true
];

Давайте разберем все ключи более подробно.

js_core_public – массив js-расширений, который необходим модулю для работы в опубликованном состоянии. Полностью отказываться от landing_core мы не рекомендуем, так как он несет ряд библиотек, нужных для показа (например, vendors_base.css это Bootstrap), но дополнить или изменить ряд скриптов – вполне.

Вот так выглядит системное ядро landing_core (вы можете скопировать его в свое расширение, зарегистрировать его, а затем указать ваш код в js_core_public)

<?php

// $pathJS = '/bitrix/js/landing';
// $pathTemplate24 = '/bitrix/templates/landing24';

$jsConfig = array(
	// ...
	'landing_core_custom' => array(// изменили ключ, так как регистрируем свое расширение
		'js' => array(
			$pathJS . '/utils.js',
			$pathTemplate24 . '/assets/js/helpers/onscroll-animation_init.js',
			$pathTemplate24 . '/assets/js/helpers/go_to_init.js',
			$pathTemplate24 . '/assets/js/helpers/popup_init.js',
			$pathTemplate24 . '/assets/js/helpers/hamburgers_init.js',
		),
		'css' => array(
			$pathTemplate24 . '/assets/vendor/vendors_base.css',
			$pathTemplate24 . '/assets/vendor/icon-awesome/css/font-awesome.css',
			$pathTemplate24 . '/assets/vendor/icon-line/css/simple-line-icons.css',
			$pathTemplate24 . '/assets/vendor/icon-line-pro/style.css',
			$pathTemplate24 . '/assets/vendor/icon-hs/style.css',
			$pathTemplate24 . '/assets/vendor/icon-etlinefont/style.css',
			$pathTemplate24 . '/themes/themes_core.css',
			$pathTemplate24 . '/assets/css/custom.css',
			$pathTemplate24 . '/assets/css/themes_custom.css',
		),
		'rel' => array('landing_public'),
	),
	// ...
);

foreach ($jsConfig as $code => $ext)
{
	\CJSCore::registerExt($code, $ext);
}

// вносим коррективы в .config.php
return [
	'js_core_public' => [
		'landing_core_custom'//для публичной части указываем уже свое расширение
	],
	'js_core_edit' => [
		'landing_core'//для редактора, как вариант, можно оставить и системное
	],
	'disable_namespace' => [],
	'enable_namespace' => [],
	'public_wrapper_block' => true,
	'google_font' => true
];

Примечание. Узнать больше про регистрацию расширений.

js_core_edit - все то же самое, что и js_core_public, но только в отношении режима редактирования.

disable_namespace - в этом параметре можно через запятую перечислить те пространства имен блоков, которые не нужно показывать в редакторе. Например, вы можете заблокировать пространство имен bitrix таким образом, что выведутся только ваши личные блоки:

'disable_namespace' => [
	'bitrix'
],

enable_namespace - в этом параметре можно напротив указать приоритетные пространства - только они будут учитываться в редакторе. Если ключ задан, то ключ disable_namespace игнорируется.

public_wrapper_block – в опубликованной версии каждый блок оборачивается в дополнительный системный div. Если вдруг вам это по какой-то причине не требуется, просто укажите здесь false.

Внимание! Значение false допустимо, если вы используете только собственные кастомные блоки. Корректная работа стандартных блоков без дополнительного wrapper'а не гарантируется

google_font – по-умолчанию в шапке шаблона подключается ряд google-шрифтов. Если это не требуется, просто укажите false.

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

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

Использование маркеров в шаблоне

В шаблоне достаточно много так называемых маркеров вывода. Маркер - это определенное место в верстке, куда будет выведен код, установленный разработчиком. Давайте, например, добавим некий код сразу после открывающего тега <head>. Воспользоваться можно любым подходящим событием на этапе сборки страницы. Давайте для примера возьмем OnBeforeProlog.

$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('main', 'OnBeforeProlog',
	function()
	{
		if (\Bitrix\Main\Loader::includeModule('landing'))
		{
			\Bitrix\Landing\Manager::setPageView(
				'AfterHeadOpen',
				'<meta http-equiv="X-UA-Compatible" content="IE=edge">'
			);
		}
	}
);

Стоит заметить, что вы можете не заботиться о соседних событиях, которые также могут установить какие-то значения в данные метки. Каждый новый вызов setPageView лишь дополнит уже имеющийся вывод (через пробел), но не перетрет его. Важен лишь порядок.

Какие есть метки шаблона на данный момент:

HtmlClass - class тега <html>.

AfterHeadOpen - текст сразу после открывающего тега <head>.

BeforeHeadClose - текст перед закрывающим тегом </head>.

HtmlClass - class тега <body>.

BodyTag - любой текст внутри тега <body> (например, стили, атрибуты).

AfterBodyOpen - текст сразу после открывающего тега <body>.

Noscript - то же самое, что AfterBodyOpen (идет перед данным тегом), с одним отличием: если на сайте включено согласие пользователей с Cookies, то это поле безусловно очищается. Предполагается, что в поле размещаются noscript-части счетчиков.

HtmlClass - class тега <main> (обертка всего содержимого страницы).

FooterJS - текст в месте вывода JS-кода в подвале страницы.

BeforeBodyClose - текст перед закрывающим тегом </body>.

И шаблоном для визуализации

<!DOCTYPE html>
<html class="HtmlClass">
<head>
	AfterHeadOpen
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>title
		<!-- Google Fonts -->
		<!-- CSS -->
		<!-- OG -->
	BeforeHeadClose
</head>
<body class="BodyClass" BodyTag>
AfterBodyOpen
<main class="MainClass">
	<!-- Body -->
	FooterJS
</main>
BeforeBodyClose
</body>
</html>


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх