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

Компоненты внутри блоков

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

Недоступно для REST!

Размещение компонента

Разместить компонент (и даже не один) в блоке достаточно просто. Для этого внутри block.php размещаете вызов нужных вам компонентов.

<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
	die();
}
?>
<section class="landing-block g-pt-100 g-pb-100">
	<div class="container g-font-size-13">
		<?$APPLICATION->IncludeComponent(
			"bitrix:catalog.element",
			"bootstrap_v4",
			array(
				"COUNT_DISCOUNT_4_ALL_QUANTITY" => "N",
				"DEFERRED_REFRESH" => 'N',
				"SHOW_FILTER" => 'N',
				"TOTAL_BLOCK_DISPLAY" => ['top', 'bottom'],
			),
			false
		);?>
	</div>
</section>

Обратите внимание, параметры блока являются предустановленными. И в отличии от простейшего html-блока здесь первой строчкой идет проверка системной константы B_PROLOG_INCLUDED во избежании прямого доступа к файлу.

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

...
'nodes' => array(
	'bitrix:catalog.element' => array(
		'type' => 'component',
		'extra' => array(
			'editable' => array(
				'ELEMENT_ID' => array(),
				'HIDE_NOT_AVAILABLE' => array(),
				'DISCOUNT_PERCENT_POSITION' => array(
					'style' => true
				),
			)
		)
	),
),
...

Если вы хорошо уже знакомы с манифестом блока, то легко поймете, что здесь bitrix:catalog.element выступает в роли селектора, но является именем размещенного в блоке компонента. А ключи массива editable являются как раз теми настройками, которые мы разрешаем для изменения в рамках конкретного блока пользователем. Маркированные таким образом свойства будут доступны в форме редактирования блока. В случае указания style = true настройка будет размещаться в форме редактирования дизайна блока.

Название параметра, его тип и прочие параметры берутся непосредственно с параметра компонента, таким образом, перечисленные здесь ключи должны обязательно присутствовать в составе параметров компонента (быть прописаны в .parameters.php).

Редактирование параметров

Итак, блок с компонентом внутри размещен на странице. Как изменить какой-то параметр вызова такого компонента? Прежде всего, таким образом можно менять только параметры, которые разрешены в манифесте блока.

И сам код, меняющий один из параметров (но можно передавать и сразу массив):

if (\Bitrix\Main\Loader::includeModule('landing'))
{
	\Bitrix\Landing\Landing::setEditMode(true);

	$landing = \Bitrix\Landing\Landing::createInstance(
		5597
	);
	if ($landing->exist())
	{
		foreach ($landing->getBlocks() as $block)
		{
			if ($block->getId() == 44131)
			{
				$block->updateNodes([
					'bitrix:catalog.section' => [
						'MESS_BTN_BUY' => 'Add to my cart'
					]
				]);
				$block->save();
				$landing->getError()->copyError(
					$block->getError()
				);
			}
		}
	}


	foreach ($landing->getError()->getErrors() as $error)
	{
		echo $error->getCode() . ': ';
		echo $error->getMessage();
		echo "\n";
	}
}


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