Работа с разделами
Работа с разделами Битрикс и компонентом 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";