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

Создание и изменение блока

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

Создание блока

Создать свой блок достаточно просто. Все блоки размещаются на диске по пути /bitrix/blocks/, далее идет разграничение по так называемым пространствам имен. Добавить свой блок вы можете непосредственно в свое пространство, предварительно создав его. Пространство имён - это просто каталог внутри /bitrix/blocks/.

Примечание: Также поддерживается директория /local.

Блок состоит из следующих файлов:

  1. Основного тела блока block.php, там содержится разметка блока, которая копируется в базу данных при добавлении блока на страницу.
  2. Файла .description.php, где находится манифест блока. Для показа блока в репозитории необходимо как минимум название блока в таком Пространстве имён.
  3. Языковые файлы (согласно правилам языковых файлов Bitrix Framework).
  4. Необязательные файлы script.js/style.css, которые будут подключены вместе с блоком и могут нести дополнительную логику/отображение.
  5. Необязательный файл design_style.css, в котором можно отразить css-правила, который будут применяться исключительно в конструкторе блока. Например, можно скрывать лишние карточки.
  6. Необязательный файл preview.jpg, который служит иллюстрацией блока в каталоге.

Данные файлы размещаются внутрь папки с определенным названием (лучше использовать латиницу, цифры, символы "." и "-"). С этого момента имя папки будет служить также и символьным кодом блока, прописываться в базу данных при добавлении блока на страницу. Будьте с этим осторожны.

Обратите внимание, что имя блока должно быть уникально в рамках всей установки. К примеру, если есть блок about в пространстве bitrix и в пространстве my, то в системе будет существовать только один блок, причем тот, который в пространстве my, так как оно расположено ниже пространства bitrix. Это сделано специально для возможности переопределения штатных блоков разработчиками. При распространении таких блоков через Маркетплейс рекомендуется именам блоков давать префикс партнера. Облачный REST лишен таких условий и рекомендуется к распространению как более универсальный вариант.


Важно! После добавления блока (блоков) обязательно сделайте вызов кода для очистки кеша (либо через административный интерфейс в настройках кеширования):

if (\Bitrix\Main\Loader::includeModule('landing'))
{
	\Bitrix\Landing\Block::clearRepositoryCache();
}

Важно! Пространство имен bitrix является зарезервированным и подгружается с облачного сервиса компании Битрикс. Находящиеся там блоки не относятся к каталогу в редакторе и размещены в ознакомительных целях.

Верстку новых блоков вы можете заказать у специалиста, или воспользоваться предложенными дополнительными блоками вендора.

Примеры

Пример файла block.php

<section class="landing-block">
	<div class="text-center g-color-gray-dark-v3 g-pa-10">
		<div class="g-width-600 mx-auto">
			<div class="landing-block-node-text g-font-size-12 ">
				<p>© 2017 All right reserved. Developed by
				<a href="#" class="landing-block-node-link g-color-primary">Bitrix24</p>
			</div>
		</div>
	</div>
</section>

Пример файла .description.php

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
	die();
}

use \Bitrix\Main\Localization\Loc;

return array(
	'block' =>
		array(
			'name' => Loc::getMessage('LANDING_BLOCK_32.'),
			'section' => array('image'),
		),
	'cards' => array(),
	'nodes' =>
		array(
		'.landing-block-node-img-big' =>
			array(
				'name' => Loc::getMessage('LANDING_BLOCK_32.1'),
				'type' => 'img',
				'dimensions' => array('width' => 1440, 'height' => 960),
				'allowInlineEdit' => false,
			), 
		), 
);

Обновление блоков

Если вы хотите обновить верстку в уже добавленных блоков на страинцах, вам прежде надо изменить оригинал блока в репозитории, а затем выполнить код ниже. Обратите внимание, технология тестовая и требует отдельного тестирования на блоках, которые вы хотите изменить. Подробнее...

if (\Bitrix\Main\Loader::includeModule('landing'))
{
	\Bitrix\Landing\Update\Block::register(
		'20.3.four_cols_fix_img_title_text',//символьный код блока
		$params
	);
}

Массив параметров в ключах хранит селекторы, на которые нужно соответствующим образом повлиять при обновлении. В значениях же содержится массива с двумя опциональными ключами (new_class, remove_class):

$params = [
	'.landing-block-node-card-title' => [
		'new_class' => ['g-pr-0', 'g-pr-15--md', 'g-mb-8', 'g-mb-0--md'],  
		// добавляем классы для селектора landing-block-node-card-title

		'remove_class' => ['u-heading-v1__title', 'mb-0'],
		// удаляем классы из селектора landing-block-node-card-title

	],
	'.landing-block-node-card-price' => [
		'new_class' => 'd-inline-block g-ml-0 g-ml-15--md',
	],
]

Если вдруг что-то пошло не так и требуется отменить индексацию:

if (\Bitrix\Main\Loader::includeModule('landing'))
{
	\Bitrix\Landing\Update\Block::unregister(
		'20.3.four_cols_fix_img_title_text'
	);
}

Если надо потестировать на конкретном блоке сначала, как происходит обновление:

if (\Bitrix\Main\Loader::includeModule('landing'))
{
	\Bitrix\Landing\Update\Block::executeStep([
		'ID' => 44148 // ID блока
	], $count = 0, $limit = 1, $params = []);
}

Константа для разработки

Также в системе присутствует константа

define("LANDING_DEVELOPER_MODE", true);

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


Настоятельно рекомендуем использовать константу только в режиме разработки и отключать для продакшена.



© «Битрикс», 2001-2024, «1С-Битрикс», 2024