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

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

Внимание! Мы настоятельно рекомендуем ознакомиться сначала с 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-2021, «1С-Битрикс», 2021
Наверх