Курсы обучения
+7 (351) 777-80-70
2021.05.07

Установка компонентов - Линейка решений INTEC: Universe

Для работы некоторого функционала модуля (Фильтра) необходима дополнительная интеграция в некоторые шаблоны компонентов вашего сайта. Для проведения данной интеграции вам потребуются определенные технические знания или привлечение специалиста с такими знаниями.

Интеграция в данной инструкции продемонстрирована на штатных компонентах Битрикс. Если у вас значительно доработанный шаблон Битрикс или используется решение сторонних разработчиков, то компоненты могут отличатся и для того чтобы понять куда именно добавлять фрагменты кода из данной инструкции потребуется разобраться в коде доработок или конкретного решения. Если вы захотите привлечь специалистов нашей компании к выполнению данной интеграции, то мы можем оказать эту услугу на платной основе - для заказа интеграции свяжитесь с отделом продаж напрямую или через нашу службу технической поддержки.
Тоже самое касается и нашего решения Digital - в нём из коробки нет интеграции с данным модулем и ее потребуется проводить вручную. Если силами наших специалистов, то так же на платной основе.

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

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

Интеграция модуля происходит в нескольких компонентах.
  1. Фильтр (bitrix:catalog.smart.filter);
    • result_modifier.php
  2. Каталог (bitrix:catalog);
    • element.php
    • section.php
    • section_vertical.php
    • section_horizontal.php
    • result_modifier.php
    • .parameters.php
    • Ланг файл для .parameters.php
  3. Список разделов (bitrix:catalog.section);
    • result_modifier.php
  4. Список элементов в разделе (bitrix:catalog.section.list).
    • result_modifier.php
Приступим к интеграции.
  1. Настройка фильтра 
    Для размещения компонента INTEC: SEO-модуль, необходимо в файл result_modifier.php шаблона компонента (который используется у вас в каталоге) bitrix:catalog.smart.filter добавить следующий код:
    $APPLICATION->IncludeComponent('intec.seo:filter.loader', '', [ 
        'FILTER_RESULT' => $arResult 
    ], $component); 
    Файлы расположены по следующему пути: Рабочий стол > Контент > Структура сайта > Файлы и папки > bitrix > templates > название шаблона сайта > components > bitrix > catalog.smart.filter > название шаблона каталога

     
    a37.png           


  2. Настройка каталога
    Каталог находится по адресу "Рабочий стол > Контент > Структура сайта > Файлы и папки > bitrix > templates > название шаблона сайта > components > bitrix > catalog > название шаблона каталога"
    a19.png
    • element.php

      code5.png 
      В данном файле необходимо добавить несколько раз.               
      В самом начале, после подключения пролога необходимо добавить эти строчки

      use Bitrix\Main\Loader;
      use intec\core\helpers\ArrayHelper;
      use intec\core\helpers\Type;
      use intec\core\helpers\ArrayHelper;
      use intec\core\helpers\StringHelper;

      a38.png
      Затем до начала верстки (до первого div), нужно добавить следующий код

      $arIBlock = $arResult['IBLOCK'];
      $arSection = $arResult['SECTION'];

      $arArticlesExtending = [
      'SHOW' => Y,
      'PROPERTY' => ArrayHelper::getValue($arParams, 'SECTIONS_ARTICLES_EXTENDING_PROPERTY'),
      'TEMPLATE' => ArrayHelper::getValue($arParams, 'SECTIONS_ARTICLES_EXTENDING_TEMPLATE'),
      'TITLE' => ArrayHelper::getValue($arParams, 'SECTIONS_ARTICLES_EXTENDING_TITLE'),
      'QUANTITY' => ArrayHelper::getValue($arParams, 'SECTIONS_ARTICLES_EXTENDING_QUANTITY'),
      'PARAMETERS' => []
      ];
      if (empty($arArticlesExtending['TEMPLATE']))
      $arArticlesExtending['SHOW'] = false;
      if ($arArticlesExtending['SHOW']) {
      $sPrefix = 'SECTIONS_ARTICLES_EXTENDING_';
      $arArticlesExtending['TEMPLATE'] = 'news.'.$arArticlesExtending['TEMPLATE'];
      foreach ($arParams as $sKey => $mValue) {
      if (!StringHelper::startsWith($sKey, $sPrefix))
      continue;
      $sKey = StringHelper::cut(
      $sKey,
      StringHelper::length($sPrefix)
      );
      if ($sKey === 'TEMPLATE')
      continue;
      $arArticlesExtending['PARAMETERS'][$sKey] = $mValue;
      }

      $arArticlesExtending['PARAMETERS'] = ArrayHelper::merge($arArticlesExtending['PARAMETERS'], [
      'SECTION_USER_FIELDS' => array(),
      'SET_TITLE' => 'N',
      'ADD_SECTIONS_CHAIN' => 'N',
      'SET_BROWSER_TITLE' => 'N',
      'INCLUDE_IBLOCK_INTO_CHAIN' => 'N',
      'CURRENCY_ID' => $arParams['CURRENCY_ID'],
      'CONSENT_URL' => $arParams['CONSENT_URL'],
      'COMPARE_NAME' => $arParams['COMPARE_NAME'],
      'USE_COMPARE' => $arParams['USE_COMPARE'],
      'WIDE' => 'Y'
      ]);
      }
      Затем после подключения компонента bitrix:catalog.element необходимо вставить следующий код


      code6.png
      $APPLICATION->IncludeComponent('intec.seo:iblocks.metadata.loader', '', [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'ELEMENT_ID' => $elementId,
      'TYPE' => 'element',
      'MODE' => 'single',
      'METADATA_SET' => 'Y',
      'CACHE_TYPE' => $arParams['CACHE_TYPE'],
      'CACHE_TIME' => $arParams['CACHE_TIME']
      ], $component);
      $APPLICATION->IncludeComponent('intec.seo:iblocks.articles.extend.filter', '', [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'SECTION_ID' => $arSection['ID'],
      'ELEMENT_ID' => $elementId,
      'QUANTITY' => $arArticlesExtending['QUANTITY'],
      'CURRENT_URL' => $APPLICATION->GetCurPage(),
      'FILTER_NAME' => 'arCatalogArticlesExtendingFilter',
      'INCLUDE_SUBSECTIONS' => 'Y',
      'CACHE_TYPE' => $arParams['CACHE_TYPE'],
      'CACHE_TIME' => $arParams['CACHE_TIME']
      ], $component);


      $arArticlesExtending['PARAMETERS']['IBLOCK_ID'] = $arArticlesExtending['RESULT']['IBLOCK']['ID'];
      $arArticlesExtending['PARAMETERS']['IBLOCK_TYPE'] = $arArticlesExtending['RESULT']['IBLOCK']['IBLOCK_TYPE_ID'];
      $arArticlesExtending['PARAMETERS']['ELEMENT_SORT_ORDER'] = $arArticlesExtending['RESULT']['FILTER']['ID'];
      $APPLICATION->IncludeComponent(
      'bitrix:news.list',
      $arArticlesExtending['TEMPLATE'],
      $arArticlesExtending['PARAMETERS'],
      $component);
    • section.php
      Данный файл расположен там же где и element.php 
      Рабочий стол > Контент > Структура сайта > Файлы и папки > bitrix > templates > название шаблона сайта > components > bitrix > catalog > название шаблона каталога
       
       

      В данном файле найдите инициализацию фильтра для разделов и добавьте там фильтр для элементов              


      $arFilterElement = array(
      "IBLOCK_ID" => $arParams["IBLOCK_ID"],
      "ACTIVE" => "Y",
      "GLOBAL_ACTIVE" => "Y",
      "SECTION_CODE" => $arResult["VARIABLES"]["SECTION_CODE"],
      "INCLUDE_SUBSECTIONS" => "Y"
      );

      a42.png

      Затем в этом же файле, после строчки,
      $dbRes = CIBlockSection::GetList(array(), $arFilter, false, array("ID"));

      необходимо добавить еще код

      $elementCount = CIBlockElement::GetList(array(), $arFilterElement, false, array("ID"));
      $elementCount = $elementCount->SelectedRowsCount();

      a43.png
    • section_vertical.php
      В самом начале, после подключения пролога необходимо добавить эти строчки
      use Bitrix\Main\Loader;
      use Bitrix\Main\ModuleManager;
      use intec\Core;
      use intec\core\bitrix\Component;
      use intec\core\helpers\ArrayHelper;
      use intec\core\helpers\Html;
      use intec\core\helpers\Type;
      use intec\core\helpers\StringHelper;



      a41.png

      Затем необходимо добавить следующий код
      $sPrefix = 'INTEREST_PRODUCTS_';
      $iLength = StringHelper::length($sPrefix);
      $arInterestProductsProperties = [];
      foreach ($arParams as $sKey => $sValue) {
      if (!StringHelper::startsWith($sKey, $sPrefix))
      continue;

      $sKey = StringHelper::cut($sKey, $iLength);
      $arInterestProductsProperties[$sKey] = $sValue;
      }

      unset($sPrefix, $iLength, $sKey, $sValue);

      $sFilterKey = null;
      $sFilterValue = null;

      if (!empty($arResult['PRODUCTS']['INTEREST']['CATEGORIES']) && $arResult['PRODUCTS']['INTEREST']['SHOW']) {
      if ($arResult['PRODUCTS']['INTEREST']['PROPERTY']['USE']) {
      $GLOBALS['arrFiltersInterest'] = array('PROPERTY_' . $arResult['PRODUCTS']['INTEREST']['PROPERTY']['VALUE'] . '_VALUE' => $arResult['PRODUCTS']['INTEREST']['PROPERTY']['NAME']);
      $sFilterKey = 'FILTER_NAME';
      $sFilterValue = 'arrFiltersInterest';

      } else {
      if ($arResult['PRODUCTS']['INTEREST']['CATEGORIES'] == 1 && !empty($arResult['SECTION']['IBLOCK_SECTION_ID'])) {
      $sFilterKey = 'SECTION_ID';
      $sFilterValue = $arResult['SECTION']['IBLOCK_SECTION_ID'];

      } elseif ($arResult['PRODUCTS']['INTEREST']['CATEGORIES'] > 1) {
      $sFilterKey = 'SECTION_ID';
      $sFilterValue = $arResult['PRODUCTS']['INTEREST']['CATEGORIES'];
      }
      }
      }
      $arInterestProductsProperties = ArrayHelper::merge($arInterestProductsProperties, [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      $sFilterKey => $sFilterValue,
      'PROPERTY_USE' => $arResult['PRODUCTS']['INTEREST']['PROPERTY']['USE'],
      'ELEMENT_COUNT' => $arResult['PRODUCTS']['INTEREST']['COUNT'],
      'PRICE_CODE' => $arParams['PRICE_CODE'],
      'SET_BROWSER_TITLE' => 'N',
      'SET_TITLE' => 'N',
      ]);
      unset($sFilterKey, $sFilterValue);
      $arIBlock = $arResult['IBLOCK'];
      $arSection = $arResult['SECTION'];
      $sLevel = 'CHILDREN';
      $arParams = ArrayHelper::merge([
      'SECTIONS_ARTICLES_EXTENDING_PROPERTY' => 'UF_SECTIONS_ARTICLES',
      'SECTIONS_ARTICLES_EXTENDING_TEMPLATE' => null,
      ], $arParams);

      $arSectionsExtending = [
      'SHOW' => Y,
      'COUNT' => ArrayHelper::getValue($arParams, 'SECTIONS_'.$sLevel.'_EXTENDING_COUNT'),
      'PROPERTY' => ArrayHelper::getValue($arParams, 'SECTIONS_'.$sLevel.'_EXTENDING_PROPERTY'),
      'TEMPLATE' => ArrayHelper::getValue($arParams, 'SECTIONS_'.$sLevel.'_EXTENDING_TEMPLATE'),
      'TITLE' => ArrayHelper::getValue($arParams, 'SECTIONS_'.$sLevel.'_EXTENDING_TITLE'),
      'PARAMETERS' => []
      ];

      $arSectionsExtending['COUNT'] = Type::toInteger($arSectionsExtending['COUNT']);

      if ($arSectionsExtending['COUNT'] <= 0)
      $arSectionsExtending['SHOW'] = false;

      if ($arParams['SECTIONS_'.$sLevel.'_EXTENDING_USE'] !== 'Y')
      $arSectionsExtending['SHOW'] = false;

      if (empty($arSectionsExtending['TEMPLATE']))
      $arSectionsExtending['SHOW'] = false;

      if ($arSectionsExtending['SHOW']) {
      $sPrefix = 'SECTIONS_'.$sLevel.'_EXTENDING_';
      $arSectionsExtending['TEMPLATE'] = 'products.small.'.$arSectionsExtending['TEMPLATE'];

      foreach ($arParams as $sKey => $mValue) {
      if (!StringHelper::startsWith($sKey, $sPrefix))
      continue;

      $sKey = StringHelper::cut(
      $sKey,
      StringHelper::length($sPrefix)
      );

      if ($sKey === 'TEMPLATE')
      continue;

      $arSectionsExtending['PARAMETERS'][$sKey] = $mValue;
      }

      $arSectionsExtending['PARAMETERS'] = ArrayHelper::merge($arSectionsExtending['PARAMETERS'], [
      'IBLOCK_TYPE' => $arParams['IBLOCK_TYPE'],
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'SET_TITLE' => 'N',
      'SECTION_USER_FIELDS' => array(),
      'SHOW_ALL_WO_SECTION' => 'Y',
      'PRICE_CODE' => $arParams['PRICE_CODE'],
      'CONVERT_CURRENCY' => $arParams['CONVERT_CURRENCY'],
      'CURRENCY_ID' => $arParams['CURRENCY_ID'],
      'BASKET_URL' => $arParams['BASKET_URL'],
      'CONSENT_URL' => $arParams['CONSENT_URL'],
      'COMPARE_NAME' => $arParams['COMPARE_NAME'],
      'USE_COMPARE' => $arParams['USE_COMPARE'],
      'WIDE' => 'Y'
      ]);
      }

      $arArticlesExtending = [
      'SHOW' => Y,
      'PROPERTY' => ArrayHelper::getValue($arParams, 'SECTIONS_ARTICLES_EXTENDING_PROPERTY'),
      'TEMPLATE' => ArrayHelper::getValue($arParams, 'SECTIONS_ARTICLES_EXTENDING_TEMPLATE'),
      'TITLE' => ArrayHelper::getValue($arParams, 'SECTIONS_ARTICLES_EXTENDING_TITLE'),
      'QUANTITY' => ArrayHelper::getValue($arParams, 'SECTIONS_ARTICLES_EXTENDING_QUANTITY'),
      'PARAMETERS' => []
      ];

      if (empty($arArticlesExtending['TEMPLATE']))
      $arArticlesExtending['SHOW'] = false;

      if ($arArticlesExtending['SHOW']) {
      $sPrefix = 'SECTIONS_ARTICLES_EXTENDING_';
      $arArticlesExtending['TEMPLATE'] = 'news.'.$arArticlesExtending['TEMPLATE'];

      foreach ($arParams as $sKey => $mValue) {
      if (!StringHelper::startsWith($sKey, $sPrefix))
      continue;

      $sKey = StringHelper::cut(
      $sKey,
      StringHelper::length($sPrefix)
      );

      if ($sKey === 'TEMPLATE')
      continue;

      $arArticlesExtending['PARAMETERS'][$sKey] = $mValue;
      }

      $arArticlesExtending['PARAMETERS'] = ArrayHelper::merge($arArticlesExtending['PARAMETERS'], [
      'SECTION_USER_FIELDS' => array(),
      'SET_TITLE' => 'N',
      'ADD_SECTIONS_CHAIN' => 'N',
      'SET_BROWSER_TITLE' => 'N',
      'INCLUDE_IBLOCK_INTO_CHAIN' => 'N',
      'CURRENCY_ID' => $arParams['CURRENCY_ID'],
      'CONSENT_URL' => $arParams['CONSENT_URL'],
      'COMPARE_NAME' => $arParams['COMPARE_NAME'],
      'USE_COMPARE' => $arParams['USE_COMPARE'],
      'WIDE' => 'Y'
      ]);
      }

      $arSectionsExtending['PARAMETERS']['ELEMENT_SORT_FIELD'] = 'ID';

      $arArticlesExtending['PARAMETERS']['FILTER_NAME'] = 'arCatalogArticlesExtendingFilter';
      $arArticlesExtending['PARAMETERS']['SORT_BY1'] = 'ID';

      $arSectionsExtending['PARAMETERS']['FILTER_NAME'] = 'arCatalogSectionsExtendingFilter';
      $arParams = ArrayHelper::merge([
      'TAGS_USE' => 'N',
      'TAGS_TEMPLATE' => null,
      'TAGS_PROPERTY' => null,
      'POSITION' => 'top',
      'TAGS_COUNT' => 'Y',
      'TAGS_VARIABLE_TAGS' => 'tags'
      ], $arParams);

      $arTags = [
      'USE' => $arParams['TAGS_USE'] === 'Y',
      'SHOW' => false,
      'POSITION' => $arParams['TAGS_POSITION'],
      'TEMPLATE' => $arParams['TAGS_TEMPLATE'],
      'PROPERTY' => $arParams['TAGS_PROPERTY'],
      'PARAMETERS' => []
      ];

      if ($sLevel === 'ROOT')
      $arTags['USE'] = false;

      $arTags['SHOW'] = $arTags['USE'];

      if (empty($arTags['TEMPLATE']))
      $arTags['SHOW'] = false;

      if (empty($arTags['PROPERTY']))
      $arTags['SHOW'] = false;

      if ($arTags['SHOW']) {
      $sPrefix = 'TAGS_';

      foreach ($arParams as $sKey => $mValue) {
      if (!StringHelper::startsWith($sKey, $sPrefix))
      continue;

      $sKey = StringHelper::cut(
      $sKey,
      StringHelper::length($sPrefix)
      );

      if ($sKey === 'TEMPLATE')
      continue;

      $arTags['PARAMETERS'][$sKey] = $mValue;
      };

      foreach ($arResult['PARAMETERS']['COMMON'] as $sProperty)
      $arTags['PARAMETERS'][$sProperty] = ArrayHelper::getValue($arParams, $sProperty);

      $arTags['PARAMETERS'] = ArrayHelper::merge($arTags['PARAMETERS'], [
      'IBLOCK_TYPE' => $arParams['IBLOCK_TYPE'],
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'SECTION_ID' => !empty($arSection) ? $arSection['ID'] : false,
      'SECTION_SUBSECTIONS' => $arParams['INCLUDE_SUBSECTIONS'],
      'PROPERTY' => $arTags['PROPERTY'],
      'COUNT' => $arParams['TAGS_COUNT'],
      'USED' => 'Y',
      'FILTER_NAME' => $arParams['FILTER_NAME'],
      'VARIABLE_TAGS' => $arParams['TAGS_VARIABLE_TAGS'],
      'CACHE_TYPE' => $arParams['CACHE_TYPE'],
      'CACHE_TIME' => $arParams['CACHE_TIME']
      ]);
      };

      Для отображения Облака тегов укажите данную строчку там где необходимо их вывести, например перед фильтром.

      $APPLICATION->ShowViewContent($sTemplateId.'-tags');
      a45.png
      Затем перед подключением компонента bitrix:catalog.smart.filter или bitrix:catalog.section (Желательно) подключить компонент meta-информации: необходимо добавить этот код


      a44.png


      $APPLICATION->IncludeComponent('intec.seo:iblocks.section.extend.filter', '', [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'SECTION_ID' => $arSection['ID'],
      'SECTIONS_ID' => ArrayHelper::getValue($arSection, $arSectionsExtending['PROPERTY']),
      'COUNT' => $arSectionsExtending['COUNT'],
      'HAS_COUNT' => $elementCount,
      'CURRENT_URL' => $APPLICATION->GetCurPage(),
      'FILTER_NAME' => 'arCatalogSectionsExtendingFilter',
      'INCLUDE_SUBSECTIONS' => 'Y',
      'CACHE_TYPE' => $arParams['CACHE_TYPE'],
      'CACHE_TIME' => $arParams['CACHE_TIME']
      ], $component);

      После подключения компонента bitrix:catalog.smart.filter или bitrix:catalog.section (Желательно) подключить компонент meta-информации и статей из seo модуля:
      $APPLICATION->IncludeComponent('intec.seo:iblocks.metadata.loader', '', [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'SECTION_ID' => $arSection['ID'],
      'TYPE' => 'section',
      'MODE' => 'single',
      'METADATA_SET' => 'Y',
      'CACHE_TYPE' => $arParams['CACHE_TYPE'],
      'CACHE_TIME' => $arParams['CACHE_TIME']
      ], $component);

      $arArticlesExtending['RESULT'] = $APPLICATION->IncludeComponent('intec.seo:iblocks.articles.extend.filter', '', [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'SECTION_ID' => $arSection['ID'],
      'ELEMENT_ID' => null,
      'FILTER_MODE' => 'many',
      'QUANTITY' => $arArticlesExtending['QUANTITY'],
      'CURRENT_URL' => $APPLICATION->GetCurPage(),
      'FILTER_NAME' => 'arCatalogArticlesExtendingFilter',
      'INCLUDE_SUBSECTIONS' => 'Y',
      'CACHE_TYPE' => $arParams['CACHE_TYPE'],
      'CACHE_TIME' => $arParams['CACHE_TIME']
      ], $component);

      if (!empty($arArticlesExtending['RESULT']) && !empty($arArticlesExtending['RESULT']['FILTER'])) {
      if ($arArticlesExtending['RESULT']['FILTER_MODE_SINGLE'])
      $arArticlesExtending['PARAMETERS']['IBLOCK_ID'] = $arArticlesExtending['RESULT']['FILTER']['IBLOCK_ID'];
      $arArticlesExtending['PARAMETERS']['SORT_ORDER1'] = $arArticlesExtending['RESULT']['FILTER']['ID'];

      if (!empty($arArticlesExtending['TITLE']) || Type::isNumeric($arArticlesExtending['TITLE'])) {
      echo $arArticlesExtending['TITLE'];
      } ;
      $APPLICATION->IncludeComponent(
      'bitrix:news.list',
      $arArticlesExtending['TEMPLATE'],
      $arArticlesExtending['PARAMETERS'],
      $component
      );
      };
      $APPLICATION->IncludeComponent('intec.seo:filter.meta', '', [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'SECTION_ID' => $arSection['ID'],
      'CACHE_TYPE' => $arParams['CACHE_TYPE'],
      'CACHE_TIME' => $arParams['CACHE_TIME']
      ], $component);

      if ($arTags['USE']) {
      $this->SetViewTarget($sTemplateId.'-tags');

      $APPLICATION->IncludeComponent('intec.seo:filter.tags', '', [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'SECTION_ID' => $arSection['ID'],
      'INCLUDE_SUBSECTIONS' => $arParams['INCLUDE_SUBSECTIONS'],
      'CACHE_TYPE' => $arParams['CACHE_TYPE'],
      'CACHE_TIME' => $arParams['CACHE_TIME']
      ], $component);

      $this->EndViewTarget();
      };







    • Аналогичные действия необходимо произвести с файлом section_horizontal.php
    • Необходимо создать файл result_modifier.php и весь стандартный код в нем заменить на этот




      use Bitrix\Main\Data\Cache;
      use Bitrix\Main\Loader;
      use intec\core\collections\Arrays;
      use intec\core\helpers\ArrayHelper;
      use intec\core\helpers\Html;
      use intec\core\helpers\Type;


      /**
      * @var array $arParams
      * @var array $arResult
      * @var CBitrixComponentTemplate $this
      */

      if (!Loader::includeModule('iblock'))
      return;

      if (!Loader::includeModule('intec.core'))
      return;

      $arParams = ArrayHelper::merge([

      'INTEREST_PRODUCTS_SHOW' => 'N',
      'INTEREST_PRODUCTS_CATEGORIES_PROPERTY_USE' => 'N',
      'INTEREST_PRODUCTS_CATEGORIES_PROPERTY' => null,
      'INTEREST_PRODUCTS_CATEGORIES' => null,
      'INTEREST_PRODUCTS_TITLE' => null,
      'INTEREST_PRODUCTS_POSITION' => 'footer',

      'ADDITIONAL_ARTICLES_SHOW' => 'N',
      'ADDITIONAL_ARTICLES_HEADER_SHOW' => 'N',
      'ADDITIONAL_ARTICLES_HEADER_TEXT' => null,
      ], $arParams);

      if (empty($arParams['FILTER_NAME']))
      $arParams['FILTER_NAME'] = 'arrCatalogFilter';

      $arIBlock = null;
      $arSection = null;

      if (!empty($arParams['IBLOCK_ID'])) {
      $oCache = Cache::createInstance();
      $arFilter = [
      'ID' => $arParams['IBLOCK_ID'],
      'ACTIVE' => 'Y'
      ];

      if ($oCache->initCache(36000, 'IBLOCK'.serialize($arFilter), '/iblock/catalog')) {
      $arIBlock = $oCache->getVars();
      } else if ($oCache->startDataCache()) {
      $arIBlocks = Arrays::fromDBResult(CIBlock::GetList([], $arFilter));
      $arIBlock = $arIBlocks->getFirst();
      $oCache->endDataCache($arIBlock);
      }
      }

      if (
      !empty($arResult['VARIABLES']['SECTION_ID']) ||
      !empty($arResult['VARIABLES']['SECTION_CODE'])
      ) {
      $oCache = Cache::createInstance();
      $arFilter = [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'ACTIVE' => 'Y',
      'GLOBAL_ACTIVE' => 'Y'
      ];

      if (!empty($arResult['VARIABLES']['SECTION_ID'])) {
      $arFilter['ID'] = $arResult['VARIABLES']['SECTION_ID'];
      } else {
      $arFilter['CODE'] = $arResult['VARIABLES']['SECTION_CODE'];
      }

      if ($oCache->initCache(36000, 'SECTION'.serialize($arFilter), '/iblock/catalog')) {
      $arSection = $oCache->getVars();
      } else if ($oCache->startDataCache()) {
      $arSections = Arrays::fromDBResult(CIBlockSection::GetList([], $arFilter, false, [
      '*',
      'UF_*'
      ]));

      $arSection = $arSections->getFirst();
      $oCache->endDataCache($arSection);
      }
      }

      $arResult['IBLOCK'] = $arIBlock;
      $arResult['SECTION'] = $arSection;

      $arResult['PRODUCTS'] = [
      'INTEREST' => [
      'SHOW' => $arParams['INTEREST_PRODUCTS_SHOW'] === 'Y',
      'PROPERTY' => [
      'USE' => $arParams['INTEREST_PRODUCTS_CATEGORIES_PROPERTY_USE'] === 'Y',
      'VALUE' => $arParams['INTEREST_PRODUCTS_CATEGORIES_PROPERTY'],
      'NAME' => null,
      ],
      'TITLE' => $arParams['INTEREST_PRODUCTS_TITLE'],
      'COUNT' => $arParams['INTEREST_PRODUCTS_COUNT'] > 0 ? $arParams['INTEREST_PRODUCTS_COUNT'] : 1,
      'POSITION' => $arParams['INTEREST_PRODUCTS_POSITION'],
      'CATEGORIES' => $arParams['INTEREST_PRODUCTS_CATEGORIES']
      ],
      ];

      $arResult['ADDITIONAL'] = [
      'ARTICLES' => [
      'SHOW' => $arParams['ADDITIONAL_ARTICLES_SHOW'] === 'Y' && !empty($arParams['PROPERTY_ADDITIONAL_ARTICLES']),
      'HEADER' => [
      'SHOW' => $arParams['ADDITIONAL_ARTICLES_HEADER_SHOW'] === 'Y',
      'TEXT' => $arParams['~ADDITIONAL_ARTICLES_HEADER_TEXT']
      ]
      ],
      ];

      $arAdditional = function ($paramName) use (&$arResult, &$arParams) {

      $arAdditional = [];

      if (!empty($arParams[$paramName])) {
      $arProperty = ArrayHelper::getValue($arResult, [
      'SECTION',
      $arParams[$paramName]
      ]);

      if (!empty($arProperty)) {
      foreach ($arProperty as $sValue) {
      if (!empty($sValue))
      $arAdditional[] = $sValue;
      }

      }

      }

      return $arAdditional;
      };

      $arAdditionalArticles = $arAdditional('PROPERTY_ADDITIONAL_ARTICLES');

      if ($arResult['ADDITIONAL']['ARTICLES']['SHOW'] && empty($arAdditionalArticles))
      $arResult['ADDITIONAL']['ARTICLES']['SHOW'] = false;

      if (!empty($arAdditionalArticles))
      $arResult['ADDITIONAL']['ARTICLES']['VALUE'] = $arAdditionalArticles;

      unset($arAdditionalArticles);

      $arResult['PARAMETERS'] = [
      'COMMON' => [
      'FORM_ID',
      'FORM_TEMPLATE',
      'FORM_PROPERTY_PRODUCT',
      'PROPERTY_MARKS_RECOMMEND',
      'PROPERTY_MARKS_NEW',
      'PROPERTY_MARKS_HIT',
      'PROPERTY_ORDER_USE',
      'CONSENT_URL',
      'LAZY_LOAD',
      'VOTE_MODE',
      'DELAY_USE',
      'QUANTITY_MODE',

      'QUANTITY_BOUNDS_FEW',
      'QUANTITY_BOUNDS_MANY',

      'VIDEO_IBLOCK_TYPE',
      'VIDEO_IBLOCK_ID',
      'VIDEO_PROPERTY_URL',
      'SERVICES_IBLOCK_TYPE',
      'SERVICES_IBLOCK_ID',
      'REVIEWS_IBLOCK_TYPE',
      'REVIEWS_IBLOCK_ID',
      'REVIEWS_PROPERTY_ELEMENT_ID',
      'REVIEWS_USE_CAPTCHA',
      'PROPERTY_ARTICLE',
      'PROPERTY_BRAND',
      'PROPERTY_PICTURES',
      'PROPERTY_SERVICES',
      'PROPERTY_DOCUMENTS',
      'PROPERTY_ADDITIONAL',
      'PROPERTY_ASSOCIATED',
      'PROPERTY_RECOMMENDED',
      'PROPERTY_VIDEO',
      'OFFERS_PROPERTY_ARTICLE',
      'OFFERS_PROPERTY_PICTURES',

      'CONVERT_CURRENCY',
      'CURRENCY_ID',
      'PRICE_CODE'
      ]
      ];

      if ($arParams['SEF_TABS_USE'] !== 'Y') {
      unset($arResult['URL_TEMPLATES']['tabs']);
      unset($arResult['VARIABLES']['TAB']);
      }

      if ($arParams['SEF_MODE'] === 'N') {
      if ($arParams['SEF_TABS_USE'] === 'Y') {
      $arResult['URL_TEMPLATES']['tabs'] = Html::encode($APPLICATION->GetCurPage()).'?'.
      $arResult['ALIASES']['SECTION_ID'].'=#SECTION_ID#&'.
      $arResult['ALIASES']['ELEMENT_ID'].'=#ELEMENT_ID#&'.
      $arResult['ALIASES']['TAB'].'=#TAB#';
      }
      }

      if ($arResult['PRODUCTS']['INTEREST']['PROPERTY']['USE']) {
      $property_name = CIBlockPropertyEnum::GetList(Array(), Array(
      "IBLOCK_ID" => $arParams['IBLOCK_ID'],
      "CODE" => $arResult['PRODUCTS']['INTEREST']['PROPERTY']['VALUE'],
      "EXTERNAL_ID" => $arResult['PRODUCTS']['INTEREST']['CATEGORIES']));

      $arResult['PRODUCTS']['INTEREST']['PROPERTY']['NAME'] = $property_name->GetNext()['VALUE'];

      unset($property_name);
      }

    • parametrs.php
      В данном файле в самом начале необходимо добавить строчки

      use intec\core\bitrix\Component;
      use intec\core\collections\Arrays;
      use intec\core\helpers\Type;
      use intec\core\helpers\StringHelper;
      use intec\core\helpers\ArrayHelper;
      use Bitrix\Main\Localization\Loc;
      Затем после подключения модуля iblock нужно вставить код

      $arParametersCommon = [
      'FORM_ID',
      'FORM_TEMPLATE',
      'FORM_PROPERTY_PRODUCT',
      'PROPERTY_MARKS_RECOMMEND',
      'PROPERTY_MARKS_NEW',
      'PROPERTY_MARKS_HIT',
      'PROPERTY_ORDER_USE',
      'CONSENT_URL',
      'LAZY_LOAD',
      'VOTE_MODE',
      'DELAY_USE',
      'QUANTITY_MODE',
      'QUANTITY_BOUNDS_FEW',
      'QUANTITY_BOUNDS_MANY',

      'SERVICES_IBLOCK_TYPE',
      'SERVICES_IBLOCK_ID',
      'REVIEWS_IBLOCK_TYPE',
      'REVIEWS_IBLOCK_ID',
      'REVIEWS_PROPERTY_ELEMENT_ID',
      'REVIEWS_USE_CAPTCHA',
      'PROPERTY_ARTICLE',
      'PROPERTY_BRAND',
      'PROPERTY_PICTURES',
      'PROPERTY_SERVICES',
      'PROPERTY_DOCUMENTS',
      'PROPERTY_ADDITIONAL',
      'PROPERTY_ASSOCIATED',
      'PROPERTY_RECOMMENDED',
      'PROPERTY_VIDEO',
      'OFFERS_PROPERTY_ARTICLE',
      'OFFERS_PROPERTY_PICTURES',

      'CONVERT_CURRENCY',
      'CURRENCY_ID',
      'PRICE_CODE'
      ];

      После этого в конце файла добавьте следующий кусок кода

      $sComponent = 'bitrix:catalog.section.list';
      $sTemplate = 'catalog.';
      $arTemplates = Arrays::from(CComponentUtil::GetTemplatesList(
      $sComponent,
      $siteTemplate
      ))->asArray(function ($iIndex, $arTemplate) use (&$sTemplate) {
      if (!StringHelper::startsWith($arTemplate['NAME'], $sTemplate))
      return ['skip' => true];

      $sName = StringHelper::cut(
      $arTemplate['NAME'],
      StringHelper::length($sTemplate)
      );

      return [
      'key' => $sName,
      'value' => $sName
      ];
      });

      foreach (['ROOT', 'CHILDREN'] as $sLevel) {
      $sPrefix = 'SECTIONS_'.$sLevel.'_';
      $sTemplate = ArrayHelper::getValue($arCurrentValues, $sPrefix.'TEMPLATE');
      $sTemplate = ArrayHelper::fromRange($arTemplates, $sTemplate, false, false);

      if (!empty($sTemplate))
      $sTemplate = 'catalog.'.$sTemplate;

      if (!empty($sTemplate)) {
      $arTemplateParameters = ArrayHelper::merge($arTemplateParameters, Component::getParameters(
      $sComponent,
      $sTemplate,
      $siteTemplate,
      $arCurrentValues,
      $sPrefix,
      function ($sKey, &$arParameter) use (&$sLevel, &$arParametersCommon) {
      if (ArrayHelper::isIn($sKey, $arParametersCommon))
      return false;
      $arParameter['PARENT'] = 'SECTIONS_SETTINGS';
      $arParameter['NAME'] = Loc::getMessage('C_CATALOG_CATALOG_1_SECTIONS_'.$sLevel).'. '.$arParameter['NAME'];

      return true;
      },
      Component::PARAMETERS_MODE_TEMPLATE
      ));
      }

      if ($sLevel === 'CHILDREN') {

      $sExtendingPrefix = $sPrefix.'EXTENDING_';
      $sExtendingComponent = 'bitrix:catalog.section';
      $sExtendingTemplate = 'products.small.';

      $arExtendingTemplates = Arrays::from(CComponentUtil::GetTemplatesList(
      $sExtendingComponent,
      $siteTemplate
      ))->asArray(function ($iIndex, $arTemplate) use (&$sExtendingTemplate) {
      if (!StringHelper::startsWith($arTemplate['NAME'], $sExtendingTemplate))
      return ['skip' => true];

      $sName = StringHelper::cut(
      $arTemplate['NAME'],
      StringHelper::length($sExtendingTemplate)
      );

      return [
      'key' => $sName,
      'value' => $sName
      ];
      });

      $sExtendingTemplate = ArrayHelper::getValue($arCurrentValues, $sExtendingPrefix.'TEMPLATE');
      $sExtendingTemplate = ArrayHelper::fromRange($arExtendingTemplates, $sExtendingTemplate, false, false);

      if (!empty($sExtendingTemplate))
      $sExtendingTemplate = 'products.small.'.$sExtendingTemplate;

      $arTemplateParameters[$sExtendingPrefix.'USE'] = [
      'PARENT' => 'SECTIONS_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sExtendingPrefix.'USE'),
      'TYPE' => 'CHECKBOX'
      ];

      $arTemplateParameters[$sExtendingPrefix.'COUNT'] = [
      'PARENT' => 'SECTIONS_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sExtendingPrefix.'COUNT'),
      'TYPE' => 'STRING',
      'DEFAULT' => 30
      ];

      $arFields = [];

      if (!empty($arCurrentValues['IBLOCK_ID'])) {
      $rsFields = CUserTypeEntity::GetList(['SORT' => 'ASC'], array(
      'ENTITY_ID' => 'IBLOCK_'.$arCurrentValues['IBLOCK_ID'].'_SECTION',
      'USER_TYPE_ID' => 'iblock_section',
      'MULTIPLE' => 'Y'
      ));

      while ($arField = $rsFields->Fetch())
      $arFields[$arField['FIELD_NAME']] = $arField['FIELD_NAME'];

      unset($rsFields);
      }

      $arTemplateParameters[$sExtendingPrefix.'PROPERTY'] = [
      'PARENT' => 'SECTIONS_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sExtendingPrefix.'PROPERTY'),
      'TYPE' => 'LIST',
      'VALUES' => $arFields,
      'ADDITIONAL_VALUES' => 'Y'
      ];

      unset($arFields);
      $arTemplateParameters[$sExtendingPrefix.'TITLE'] = [
      'PARENT' => 'SECTIONS_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sExtendingPrefix.'TITLE'),
      'TYPE' => 'STRING',
      'DEFAULT' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sExtendingPrefix.'TITLE_DEFAULT')
      ];

      $arTemplateParameters[$sExtendingPrefix.'TEMPLATE'] = [
      'PARENT' => 'SECTIONS_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sExtendingPrefix.'TEMPLATE'),
      'TYPE' => 'LIST',
      'VALUES' => $arExtendingTemplates,
      'ADDITIONAL_VALUES' => 'Y',
      'REFRESH' => 'Y'
      ];

      if (!empty($sExtendingTemplate)) {
      $arTemplateParameters = ArrayHelper::merge($arTemplateParameters, Component::getParameters(
      $sExtendingComponent,
      $sExtendingTemplate,
      $siteTemplate,
      $arCurrentValues,
      $sExtendingPrefix,
      function ($sKey, &$arParameter) use (&$sLevel, &$arParametersCommon) {
      if (ArrayHelper::isIn($sKey, $arParametersCommon))
      return false;

      $arParameter['PARENT'] = 'SECTIONS_SETTINGS';
      $arParameter['NAME'] = Loc::getMessage('C_CATALOG_CATALOG_1_SECTIONS_'.$sLevel).'. '.Loc::getMessage('C_CATALOG_CATALOG_1_SECTIONS_'.$sLevel.'_EXTENDING').'. '.$arParameter['NAME'];

      return true;
      },
      Component::PARAMETERS_MODE_TEMPLATE
      ));
      }

      $sArticlesExtendingPrefix = 'SECTIONS_ARTICLES_EXTENDING_';
      $sArticlesExtendingComponent = 'bitrix:news.list';
      $sArticlesExtendingTemplate = 'news.';

      $arArticlesExtendingTemplates = Arrays::from(CComponentUtil::GetTemplatesList(
      $sArticlesExtendingComponent,
      $siteTemplate
      ))->asArray(function ($iIndex, $arTemplate) use (&$sArticlesExtendingTemplate) {
      if (!StringHelper::startsWith($arTemplate['NAME'], $sArticlesExtendingTemplate))
      return ['skip' => true];

      $sName = StringHelper::cut(
      $arTemplate['NAME'],
      StringHelper::length($sArticlesExtendingTemplate)
      );

      return [
      'key' => $sName,
      'value' => $sName
      ];
      });

      $sArticlesExtendingTemplate = ArrayHelper::getValue($arCurrentValues, $sArticlesExtendingPrefix.'TEMPLATE');
      $sArticlesExtendingTemplate = ArrayHelper::fromRange($arArticlesExtendingTemplates, $sArticlesExtendingTemplate, false, false);

      if (!empty($sArticlesExtendingTemplate))
      $sArticlesExtendingTemplate = 'news.'.$sArticlesExtendingTemplate;


      $arTemplateParameters[$sArticlesExtendingPrefix.'TITLE'] = [
      'PARENT' => 'SECTIONS_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sArticlesExtendingPrefix.'TITLE'),
      'TYPE' => 'STRING',
      'DEFAULT' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sArticlesExtendingPrefix.'TITLE_DEFAULT')
      ];

      $arTemplateParameters[$sArticlesExtendingPrefix.'QUANTITY'] = [
      'PARENT' => 'SECTIONS_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sArticlesExtendingPrefix.'QUANTITY'),
      'TYPE' => 'STRING',
      'DEFAULT' => 5
      ];

      $arTemplateParameters[$sArticlesExtendingPrefix.'TEMPLATE'] = [
      'PARENT' => 'SECTIONS_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_'.$sArticlesExtendingPrefix.'TEMPLATE'),
      'TYPE' => 'LIST',
      'VALUES' => $arArticlesExtendingTemplates,
      'ADDITIONAL_VALUES' => 'Y',
      'REFRESH' => 'Y'
      ];

      if (!empty($sExtendingTemplate)) {
      $arTemplateParameters = ArrayHelper::merge($arTemplateParameters, Component::getParameters(
      $sArticlesExtendingComponent,
      $sArticlesExtendingTemplate,
      $siteTemplate,
      $arCurrentValues,
      $sArticlesExtendingPrefix,
      function ($sKey, &$arParameter) use (&$arParametersCommon) {
      if (ArrayHelper::isIn($sKey, $arParametersCommon))
      return false;

      $arParameter['PARENT'] = 'SECTIONS_SETTINGS';
      $arParameter['NAME'] = Loc::getMessage('C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING').'. '.$arParameter['NAME'];

      return true;
      },
      Component::PARAMETERS_MODE_TEMPLATE
      ));
      }
      }
      }
      if (!empty($arCurrentValues['IBLOCK_ID'])) {
      $arTemplateParameters['INTEREST_PRODUCTS_SHOW'] = [
      'PARENT' => 'LIST_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_SHOW'),
      'TYPE' => 'CHECKBOX',
      'DEFAULT' => 'N',
      'REFRESH' => 'Y'
      ];

      if ($arCurrentValues['INTEREST_PRODUCTS_SHOW'] === 'Y') {
      $arSectionsList = CIBlockSection::GetTreeList([
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      "ACTIVE" => "Y"
      ], [
      "ID",
      "NAME",
      "CODE"
      ]);

      $arSections [0] = Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_ALL');
      $arSections [1] = Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_DEFAULT');

      while($elements = $arSectionsList->GetNextElement()) {
      $element = $elements->GetFields();
      $arSections [$element['ID']] = '['.$element['CODE'].'] '.$element['NAME'];
      }

      $arTemplateParameters['INTEREST_PRODUCTS_TITLE'] = [
      'PARENT' => 'LIST_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCT_TITLE'),
      'TYPE' => 'STRING',
      'DEFAULT' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCT_NAME_DEFAULT')
      ];
      $arTemplateParameters['INTEREST_PRODUCTS_COUNT'] = [
      'PARENT' => 'LIST_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_COUNT'),
      'TYPE' => 'STRING',
      'DEFAULT' => 25
      ];

      $arTemplateParameters['INTEREST_PRODUCTS_POSITION'] = [
      'PARENT' => 'LIST_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_POSITION'),
      'TYPE' => 'LIST',
      'VALUES' => [
      'content' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_POSITION_CONTENT'),
      'footer' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_POSITION_BOTTOM')
      ]
      ];

      $arTemplateParameters['INTEREST_PRODUCTS_CATEGORIES_PROPERTY_USE'] = [
      'PARENT' => 'LIST_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_PROPERTY_USE'),
      'TYPE' => 'CHECKBOX',
      'DEFAULT' => 'N',
      'REFRESH' => 'Y'
      ];

      if ($arCurrentValues['INTEREST_PRODUCTS_CATEGORIES_PROPERTY_USE'] === 'Y') {
      $arTemplateParameters['INTEREST_PRODUCTS_CATEGORIES_PROPERTY'] = [
      'PARENT' => 'LIST_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_PROPERTY'),
      'TYPE' => 'LIST',
      'VALUES' => $arProperties->asArray(function ($iIndex, $arProperty) {
      if (empty($arProperty['CODE']))
      return ['skip' => true];

      if ($arProperty['PROPERTY_TYPE'] !== 'L' || $arProperty['LIST_TYPE'] !== 'L' || $arProperty['MULTIPLE'] === 'Y')
      return ['skip' => true];

      return [
      'key' => $arProperty['CODE'],
      'value' => '['.$arProperty['CODE'].'] '.$arProperty['NAME']
      ];
      }),
      'DEFAULT' => 'CATEGORY',
      'REFRESH' => 'Y',
      'ADDITIONAL_VALUES' => 'Y'
      ];

      if (!empty($arCurrentValues['INTEREST_PRODUCTS_CATEGORIES_PROPERTY'])) {
      $arProperty = CIBlockProperty::GetList([], [
      'IBLOCK_ID' => $arParams['IBLOCK_ID'],
      'CODE' => $arCurrentValues['INTEREST_PRODUCTS_CATEGORIES_PROPERTY']
      ])->GetNext();

      if (!empty($arProperty)) {
      $rsCategories = CIBlockPropertyEnum::GetList(['SORT' => 'ASC'], [
      'PROPERTY_ID' => $arProperty['ID']
      ]);

      while ($arCategory = $rsCategories->GetNext())
      if (!empty($arCategory['XML_ID']))
      $arCategories[$arCategory['XML_ID']] = '['.$arCategory['XML_ID'].'] '.$arCategory['VALUE'];
      }
      }

      $arTemplateParameters['INTEREST_PRODUCTS_CATEGORIES'] = [
      'PARENT' => 'LIST_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES'),
      'TYPE' => 'LIST',
      'VALUES' => $arCategories,
      'DEFAULT' => null,
      'ADDITIONAL_VALUES' => 'Y'
      ];
      } else {
      $arTemplateParameters['INTEREST_PRODUCTS_CATEGORIES'] = [
      'PARENT' => 'LIST_SETTINGS',
      'NAME' => Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES'),
      'TYPE' => 'LIST',
      'VALUES' => $arSections,
      'DEFAULT' => 0
      ];
      }

      $sComponent = 'bitrix:catalog.section';
      $sTemplate = 'products.small.6';
      $sPrefix = 'INTEREST_PRODUCTS_';

      $arTemplates = Arrays::from(CComponentUtil::GetTemplatesList(
      $sComponent,
      $siteTemplate
      ))->asArray(function ($key, $arTemplate) {
      return [
      'key' => $key,
      'value' => $arTemplate['NAME']
      ];
      });

      if (ArrayHelper::isIn($sTemplate, $arTemplates)) {
      $arRecommendedCommonParameters = [
      'SETTINGS_USE',
      'LAZYLOAD_USE'
      ];

      $arTemplateParameters = ArrayHelper::merge($arTemplateParameters, Component::getParameters(
      $sComponent,
      $sTemplate,
      $siteTemplate,
      $arCurrentValues,
      $sPrefix,
      function ($key, &$arParameter) use (&$arRecommendedCommonParameters) {
      if (ArrayHelper::isIn($key, $arRecommendedCommonParameters))
      return false;

      $arParameter['NAME'] = Loc::getMessage('C_CATALOG_CATALOG_1_INTEREST_PRODUCT').' '.$arParameter['NAME'];
      $arParameter['PARENT'] = 'LIST_SETTINGS';

      return true;
      },
      Component::PARAMETERS_MODE_TEMPLATE
      ));

      unset($arRecommendedCommonParameters);
      }

      unset($sTemplate, $sComponent, $sPrefix, $arTemplates);
      }
      }

      Также необходимо добавить код в lang файл
      Рабочий стол->Контент->Структура сайта->Файлы и папки->bitrix->templates->Название_вашего_шаблона->components->bitrix->catalog->Название_вашего_шаблона->lang->ru->.parameters.php
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCT'] = 'Вас могут заинтересовать. ';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_SHOW'] = 'Отображать блок "Вас могут заинтересовать"';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_PROPERTY_USE'] = 'Использовать свойство "Категория" для вывода в блок "Вас могут заинтересовать"';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_PROPERTY'] = 'Свойство для вывода в блок "Вас могут заинтересовать"';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCT_TITLE'] = 'Заголовок блока "Вас могут заинтересовать"';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCT_NAME_DEFAULT'] = 'Вас могут заинтересовать';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_POSITION'] = 'Позиция блока "Вас могут заинтересовать"';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_POSITION_CONTENT'] = 'В блоке контента';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_POSITION_BOTTOM'] = 'Внизу страницы ';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES'] = 'Категория "Вас могут заинтересовать"';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_ALL'] = 'Все';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_DEFAULT'] = 'По умолчанию';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_COUNT'] = 'Количество элементов в блоке "Вас могут заинтересовать" (минимум 1)';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING_TITLE'] = 'Заголовок статей расширения';

      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING_TITLE_DEFAULT'] = 'Полезные статьи';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT'] = 'Корневые разделы';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT_SECTION_DESCRIPTION_SHOW'] = 'Отображать описание в корне';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT_SECTION_DESCRIPTION_POSITION'] = 'Позиция описания в корне';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT_SECTION_DESCRIPTION_POSITION_TOP'] = 'Сверху';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT_SECTION_DESCRIPTION_POSITION_BOTTOM'] = 'Снизу';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT_CANONICAL_URL_USE'] = 'Использовать канонический адрес в корне';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT_CANONICAL_URL_TEMPLATE'] = 'Шаблон канонического адреса в корне';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT_TEMPLATE'] = 'Шаблон корневых разделов';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ROOT_MENU_SHOW'] = 'Отображать меню в корневых разделах';

      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN'] = 'Вложенные разделы';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_SECTION_DESCRIPTION_SHOW'] = 'Отображать описание в разделах';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_SECTION_DESCRIPTION_POSITION'] = 'Позиция описания в разделах';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_SECTION_DESCRIPTION_POSITION_TOP'] = 'Сверху';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_SECTION_DESCRIPTION_POSITION_BOTTOM'] = 'Снизу';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_CANONICAL_URL_USE'] = 'Использовать канонический адрес вложенных разделов';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_CANONICAL_URL_TEMPLATE'] = 'Шаблон канонического адреса вложенных разделов';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_TEMPLATE'] = 'Шаблон вложенных разделов';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_MENU_SHOW'] = 'Отображать меню во вложенных разделах';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_EXTENDING'] = 'Расширение товаров';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_EXTENDING_USE'] = 'Использовать расширение товаров за счет родительских разделов';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_EXTENDING_COUNT'] = 'Максимальное количество товаров расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_EXTENDING_PROPERTY'] = 'Свойство с разделами, откуда берутся товары расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_EXTENDING_TITLE'] = 'Заголовок товаров расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_EXTENDING_TITLE_DEFAULT'] = 'Смотрите также';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_EXTENDING_TEMPLATE'] = 'Шаблон товаров расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_ARTICLES_EXTENDING'] = 'Выводить статьи для расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING_QUANTITY'] = 'Количество выводимых статей для расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING'] = 'Выводить статьи для расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING_COUNT'] = 'Максимальное количество статей расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING_TITLE'] = 'Заголовок статей расширения';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING_TITLE_DEFAULT'] = 'Полезные статьи';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_ARTICLES_EXTENDING_TEMPLATE'] = 'Шаблон статей расширения';
      $MESS['C_CATALOG_CATALOG_1_TAGS_COUNT'] = 'Теги. Подсчитывать количество элементов для каждого тэга';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_COUNT'] = 'Количество элементов в блоке "Вас могут заинтересовать" (минимум 1)';
      $MESS['C_CATALOG_CATALOG_1_TAGS_PROPERTY'] = 'Теги. Свойство "Тэги"';
      $MESS['C_CATALOG_CATALOG_1_SECTIONS_CHILDREN_EXTENDING_PROPERTY'] = 'Свойство с разделами, откуда берутся товары расширения';
      $MESS['C_CATALOG_CATALOG_1_PROPERTY_ADDITIONAL_ARTICLES'] = 'Свойство "Статьи раздела"';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_PROPERTY_USE'] = 'Использовать свойство "Категория" для вывода в блок "Вас могут заинтересовать"';
      $MESS['C_CATALOG_CATALOG_1_INTEREST_PRODUCTS_CATEGORIES_PROPERTY'] = 'Свойство для вывода в блок "Вас могут заинтересовать"';

  1. Настройка шаблона списка разделов
    В данном шаблоне необходимо подправить файл result_modifier.php, он находится по адресу /bitrix/templates/название_вашего_шаблона/components/bitrix/catalog.section/название_шаблона                           
    a24.png

    В данный файл необходимо добавить следующий код
    $arSeo = $APPLICATION->IncludeComponent('intec.seo:iblocks.elements.modifier', '', [
    'IBLOCK_ID' => $arParams['IBLOCK_ID'],
    'SECTION_ID' => $arParams['SECTION_ID'],
    'SECTION_CODE' => $arParams['SECTION_CODE'],
    'ITEMS' => $arResult['ITEMS'],
    'PAGE_USE' => 'Y',
    'PAGE_COUNT' => !empty($arResult['NAV_RESULT']) ? $arResult['NAV_RESULT']->NavPageCount : null,
    'PAGE_SIZE' => !empty($arResult['NAV_RESULT']) ? $arResult['NAV_RESULT']->NavPageSize : null,
    'PAGE_NUMBER' => !empty($arResult['NAV_RESULT']) ? $arResult['NAV_RESULT']->NavPageNomer : null,
    'CACHE_TYPE' => 'N'
    ], $component);

    if (!empty($arSeo))
    $arResult['ITEMS'] = $arSeo['ITEMS'];

    foreach ($arResult['ITEMS'] as $arItem) {
    $arItems[] = $arItem['ID'];
    }

    $GLOBALS['arCatalogSectionsExtendingFilterMainItems'] = $arItems;


  2. Настройка шаблона списка элементов в разделе разделов
    В данном шаблоне необходимо подправить файл result_modifier.php, он находится по адресу /bitrix/templates/название_вашего_шаблона/components/bitrix/catalog.section.list/название_шаблона                           

    a25.png

    В данный файл необходимо добавить следующий код
    foreach($arResult['SECTIONS'] as $arSection) {
    if (!empty($arSection['PICTURE'])) {
    $arSection['PICTURE']['TITLE'] = ArrayHelper::getValue($arSection, ['IPROPERTY_VALUES', 'SECTION_PICTURE_FILE_TITLE']);
    $arSection['PICTURE']['ALT'] = ArrayHelper::getValue($arSection, ['IPROPERTY_VALUES', 'SECTION_PICTURE_FILE_ALT']);

    if (empty($arSection['PICTURE']['TITLE']))
    $arSection['PICTURE']['TITLE'] = $arSection['NAME'];

    if (empty($arSection['PICTURE']['ALT']))
    $arSection['PICTURE']['ALT'] = $arSection['NAME'];
    }

    $arSection['SECTIONS'] = [];
    $arSections[$arSection['ID']] = $arSection;
    }


    $arMeta = $APPLICATION->IncludeComponent('intec.seo:iblocks.metadata.loader', '', [

    'IBLOCK_ID' => $arParams['IBLOCK_ID'],
    'SECTION_ID' => ArrayHelper::getKeys($arSections),
    'TYPE' => 'section',
    'MODE' => 'multiple',
    'CACHE_TYPE' => 'N'
    ], $component);

    foreach ($arSections as &$arSection) {
    $arMetaSection = ArrayHelper::getValue($arMeta['SECTIONS'], $arSection['ID']);

    if (empty($arMetaSection))
    continue;

    if (!empty($arSection['PICTURE'])) {
    if (!empty($arMetaSection['META']['picturePreviewTitle']) || Type::isNumeric($arMetaSection['META']['picturePreviewTitle']))
    $arSection['PICTURE']['TITLE'] = $arMetaSection['META']['picturePreviewTitle'];

    if (!empty($arMetaSection['META']['picturePreviewAlt']) || Type::isNumeric($arMetaSection['META']['picturePreviewAlt']))
    $arSection['PICTURE']['ALT'] = $arMetaSection['META']['picturePreviewAlt'];
    }
    }

    unset($arMeta, $arMetaSection, $arSection);

Модуль также позволяет выводить верхнее, нижнее и дополнительное описание через отложенные функции.
Отложенные функции - технология, позволяющая задавать заголовок страницыпункты навигационной цепочкиCSS стилидополнительные кнопки в панель управлениямета-теги и т.п. с помощью функций используемых непосредственно в теле страницы. Соответствующие результаты работы этих функций выводятся в прологе, то есть выше по коду, чем они были заданы.
Для этого требуется вставить требуемые функции в желаемую часть кода.
  • Вывод верхнего описания
    $APPLICATION->ShowViewContent('seoFilterMetaDescriptionTop');
  • Вывод нижнего описания
    $APPLICATION->ShowViewContent('seoFilterMetaDescriptionBottom');
  • Вывод дополнительного описания
    $APPLICATION->ShowViewContent('seoFilterMetaDescriptionAdditional');

Наши решения