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