Работа с разделами Битрикс и компонентом catalog.section
Последние записи
Получение SECTION_PAGE_URL
на d7
$parentFilter = [
'select' => [
'ID',
'NAME',
'IBLOCK_ID',
'IBLOCK_SECTION_ID',
'CODE',
'SECTION_PAGE_URL_RAW' => 'IBLOCK.SECTION_PAGE_URL'
],
'filter' => [
'=IBLOCK_ID' => $arParams["IBLOCK_ID"]
'=ID' => $SECTION_ID
],
'cache' => array(
'ttl' => 86400, // Время жизни кеша сутки
//'cache_joins' => true // Кешировать ли выборки с JOIN
)
];
$parentSection = \Bitrix\Iblock\SectionTable::getList($parentFilter)->fetch();
$parentSection['SECTION_PAGE_URL'] = \CIBlock::ReplaceDetailUrl($parentSection['SECTION_PAGE_URL_RAW'], $parentSection, true, 'S');
Получение родительского раздела первого уровня
$connection = \Bitrix\Main\Application::getConnection();
$PARENT_ID = $arResult['IBLOCK_SECTION_ID'];
$FIRST_LEVEL_SECTION = $connection->query('SELECT bis.ID FROM b_iblock_section as bis LEFT JOIN b_iblock_section as bis2 ON bis2.ID = ' . $PARENT_ID . ' where bis.LEFT_MARGIN < bis2.LEFT_MARGIN AND bis.RIGHT_MARGIN > bis2.RIGHT_MARGIN AND bis.IBLOCK_ID = bis2.IBLOCK_ID AND bis.DEPTH_LEVEL = 1')->fetch();
Получение всех подразделов раздела, включая вложенные
\Bitrix\Iblock\SectionTable::getList([
'select' => ['ID', 'INNER_ID' => 'INNER_SECTION.ID'],
'filter' => [
'IBLOCK_ID' => $IBLOCK_ID,
'ID' => [$SECTION_IDS]
],
'runtime' => [
'INNER_SECTION' => [
'data_type' => \Bitrix\Iblock\SectionTable::class,
'reference' => [
'<this.LEFT_MARGIN' => 'ref.LEFT_MARGIN',
'>this.RIGHT_MARGIN' => 'ref.RIGHT_MARGIN',
'this.IBLOCK_ID' => 'ref.IBLOCK_ID'
],
'join_type' => 'LEFT'
]
]
])->fetchAll();
Получение данных раздела по его коду в Битрикс
$section = \Bitrix\Iblock\SectionTable::query()
->where('IBLOCK_ID', $iblockId)
->where('CODE', 'КОД РАЗДЕЛА')
->where('ACTIVE', 'Y')
->setSelect(['*'])
->exec()
->fetch()
;
Получение пользовательского свойства раздела
\Bitrix\Main\Loader::includeModule("iblock");
$entity = \Bitrix\Iblock\Model\Section::compileEntityByIblock($IBLOCK_ID);
$attendant = $entity::getList(array(
"select" => array("UF_ATTENDANT", "ID", "NAME"),
"filter" => array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "ID" => $intSectionID, "GLOBAL_ACTIVE" => "Y")
))->fetch();
Получаем все разделы к которым привязан элемент
\Bitrix\Iblock\ElementTable::getList([
'filter' => [
'=ID' => $ELEMENT_ID,
],
'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 из нескольких разделов
В первую очереди и обнулите значения актуальной привязки к разделам. Например так:
$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";
Комментарии