Компоненты внутри блоков
Внимание! Мы настоятельно рекомендуем ознакомиться сначала с 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";
}
}