Полный цикл в digital

Работа с разделами

Работа с разделами Битрикс и компонентом catalog.section.

Получение SECTION_PAGE_URL

  • '=IBLOCK_ID' => 48 ID инфоблока
  • '=ID' => 150 ID секции
<?
// это подключаем если код ниже будет исполняться в отдельном файле php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
// подключаем нужный класс для работы с инфоблоком
\Bitrix\Main\Loader::includeModule('iblock');
// массив запроса
$parentFilter = [
    'select' => [
        'ID',
        'NAME',
        'IBLOCK_ID',
        'IBLOCK_SECTION_ID',
        'CODE',
        'SECTION_PAGE_URL_RAW' => 'IBLOCK.SECTION_PAGE_URL'
    ],
    'filter' => [
        '=IBLOCK_ID' => 48,
        '=ID' => 150,
    ]
];
// запрос к базе данных
$parentSection = \Bitrix\Iblock\SectionTable::getList($parentFilter)->fetch();
// получаем URL
$url = \CIBlock::ReplaceDetailUrl($parentSection['SECTION_PAGE_URL_RAW'], $parentSection, true, 'S');

Получение данных раздела по его коду

  • 'IBLOCK_ID', 48 ID инфоблока
  • 'CODE', 'onlayn-kassy' символьный код раздела
<?
// это подключаем если код ниже будет исполняться в отдельном файле php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
// подключаем нужный класс для работы с инфоблоком
\Bitrix\Main\Loader::includeModule('iblock');
// запрос к базе
$section = \Bitrix\Iblock\SectionTable::query()
    ->where('IBLOCK_ID', 48)
    ->where('CODE', 'onlayn-kassy')
    ->where('ACTIVE', 'Y')
    ->setSelect(['*'])
    ->exec()
    ->fetch();

Выборка корневых разделов инфоблока

  • 'IBLOCK_ID' => 48 ID инфоблока
  • 'DEPTH_LEVEL' => 1 уровень вложенности
<?
// это подключаем если код ниже будет исполняться в отдельном файле php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
// подключаем нужный класс для работы с инфоблоком
\Bitrix\Main\Loader::includeModule('iblock');
// запрос к базе данных
$rsSection = \Bitrix\Iblock\SectionTable::getList(array(
    'filter' => array(
        'IBLOCK_ID' => 48,
        'DEPTH_LEVEL' => 1,
    ),
    'select' =>  array('ID', 'CODE', 'NAME'),
))->fetch();

Получение пользовательского свойства раздела

  • "UF_ID_CATEGORIES_MARKETPLEJS" свойство
  • "IBLOCK_ID" => 48 ID инфоблока
  • "ID" => 164 ID раздела
<?
// это подключаем если код ниже будет исполняться в отдельном файле php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
// подключаем нужный класс для работы с инфоблоком
\Bitrix\Main\Loader::includeModule('iblock');
// подключаем нужный ORM класс
$entity = \Bitrix\Iblock\Model\Section::compileEntityByIblock(48);
// запрос к базе данных
$attendant = $entity::getList(array(
    "select" => array("UF_ID_CATEGORIES_MARKETPLEJS", "ID", "NAME"),
    "filter" => array("IBLOCK_ID" => 48, "ACTIVE" => "Y", "ID" => 164)
))->fetch();

Получаем все разделы к которым привязан элемент

  • '=ID' => 10390 ID элемента
<?
// это подключаем если код ниже будет исполняться в отдельном файле php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
// подключаем нужный класс для работы с инфоблоком
\Bitrix\Main\Loader::includeModule('iblock');
// запрос к базе данных
$element = \Bitrix\Iblock\ElementTable::getList([
    'filter' => [
        '=ID' => 10390,
    ],
    'select' => [
        'ID',
        'NAME',
        'SECTION_ELEMENT_ID' => 'SECTION_ELEMENT.IBLOCK_SECTION_ID',
    ],
    'runtime' => [
        new \Bitrix\Main\ORM\Fields\Relations\Reference(
            'SECTION_ELEMENT',
            \Bitrix\Iblock\SectionElementTable::class,
            \Bitrix\Main\Entity\Query\Join::on('this.ID', 'ref.IBLOCK_ELEMENT_ID')
        )
    ],
])->fetchAll();

Вывод товаров в компоненте catalog.section

Вывод товаров в компоненте catalog.section из нескольких разделов. В первую очереди и обнулите значения актуальной привязки к разделам, например так:

$arResult["VARIABLES"]["SECTION_CODE"] = '';
$arResult["VARIABLES"]["ID"] = '';

Добавьте в параметры вызова компонента следующие опции:

"INCLUDE_SUBSECTIONS" => "Y",
"SHOW_ALL_WO_SECTION" => "Y",

Передайте в фильтр правильные значения, например так:

global $arrFilter;
$arrFilter['SECTION_ID'] = [35, 77];

Если вы все сделали правильно и нет никаких дополнительных факторов (например переопределения фильтра), то ваш компонент выведет товары из указанных разделов.

Сортируем товары без цены в конец списка

Для этого достаточно указать в $arParams catalog.section или catalog

$arParams["ELEMENT_SORT_ORDER"] = "asc,nulls";
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг