/
BitrixShow
/
Sections-Items
Обзор
Документация
Войти
/
BitrixShow
/
Sections-Items
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
components/bitrix/catalog/sections.php
380 строк
24 KB
BitrixShow
create components/bitrix/catalog/sections.php
10 апр 2025, 17:55
10 апр 2025, 17:55
7ed4cb3
Код
Авторство
О чём код?
<? $countMax = 2000; // Максимальное количество элементов всего $countForSection = 2; // Максимальное количество элементов для раздела $arLog = []; $arElementsNew = []; // Для элементов с PROPERTY_NEW_VALUE = 'Y' $arElementsHit = []; // Для элементов с PROPERTY_HIT_VALUE = 'Y' // Подключаем модуль iblock CModule::IncludeModule('iblock'); // Функция для сбора элементов из раздела function collectElements($sectionId, $brand, $countForSection, &$arElementsNew, &$arElementsHit, &$arLog, &$countMax) { // Фильтр для новых элементов (PROPERTY_NEW_VALUE = 'Y') $rsElementsNew = CIBlockElement::GetList( array('SORT' => 'ASC'), array( 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ACTIVE' => 'Y', 'SECTION_ID' => $sectionId, // Ищем только в текущем разделе 'INCLUDE_SUBSECTIONS' => 'N', // Не включаем подразделы 'PROPERTY_BRAND_LOGO' => $brand, // Используем значение из переменной $brand 'PROPERTY_NEW_VALUE' => 'Y', // Фильтр по новинкам '>CATALOG_QUANTITY' => '0', // Фильтр по наличию ), false, array('nTopCount' => $countForSection), // Ограничиваем количество элементов array('ID', 'NAME', 'PROPERTY_BRAND_LOGO') // Выбираем нужные поля ); // Собираем новые элементы $elementCountNew = 0; while ($arElement = $rsElementsNew->GetNext()) { $brandLogoValue = $arElement['PROPERTY_BRAND_LOGO_VALUE']; $arLog[] = 'NEW ELEMENT: ' . $arElement['ID'] . ' ' . $arElement['NAME'] . ' BRAND_LOGO: ' . $brandLogoValue; $arElementsNew[] = $arElement['ID']; $arLog[] = 'ADDED NEW ELEMENT: ' . $arElement['ID'] . ' ' . $arElement['NAME']; $elementCountNew++; if (count($arElementsNew) >= $countMax) { return false; // Прерываем, если достигли максимального количества элементов } } // Фильтр для хитов (PROPERTY_HIT_VALUE = 'Y') $rsElementsHit = CIBlockElement::GetList( array('SORT' => 'ASC'), array( 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ACTIVE' => 'Y', 'SECTION_ID' => $sectionId, // Ищем только в текущем разделе 'INCLUDE_SUBSECTIONS' => 'N', // Не включаем подразделы 'PROPERTY_BRAND_LOGO' => $brand, // Используем значение из переменной $brand 'PROPERTY_HIT_VALUE' => 'Y', // Фильтр по хитам '>CATALOG_QUANTITY' => '0', // Фильтр по наличию ), false, array('nTopCount' => $countForSection), // Ограничиваем количество элементов array('ID', 'NAME', 'PROPERTY_BRAND_LOGO') // Выбираем нужные поля ); // Собираем хиты $elementCountHit = 0; while ($arElement = $rsElementsHit->GetNext()) { $brandLogoValue = $arElement['PROPERTY_BRAND_LOGO_VALUE']; $arLog[] = 'HIT ELEMENT: ' . $arElement['ID'] . ' ' . $arElement['NAME'] . ' BRAND_LOGO: ' . $brandLogoValue; $arElementsHit[] = $arElement['ID']; $arLog[] = 'ADDED HIT ELEMENT: ' . $arElement['ID'] . ' ' . $arElement['NAME']; $elementCountHit++; if (count($arElementsHit) >= $countMax) { return false; // Прерываем, если достигли максимального количества элементов } } return true; // Продолжаем, если не достигли лимита } // Сбор элементов из разделов второго уровня $rsSections = CIBlockSection::GetList( array('left_margin' => 'ASC'), array( 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ACTIVE' => 'Y', 'DEPTH_LEVEL' => 2, ), false, array('ID', 'NAME', 'SORT') ); while ($arSection = $rsSections->GetNext()) { $arLog[] = 'SECTION: ' . $arSection['ID'] . ' ' . $arSection['NAME']; // Собираем элементы из раздела второго уровня if (!collectElements($arSection['ID'], $brand, $countForSection, $arElementsNew, $arElementsHit, $arLog, $countMax)) { break; // Прерываем, если достигли максимального количества элементов } } // Если не набрали достаточно элементов, собираем из подразделов третьего уровня if (count($arElementsNew) < $countMax || count($arElementsHit) < $countMax) { $rsSections = CIBlockSection::GetList( array('left_margin' => 'ASC'), array( 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ACTIVE' => 'Y', 'DEPTH_LEVEL' => 3, ), false, array('ID', 'NAME', 'SORT') ); while ($arSection = $rsSections->GetNext()) { $arLog[] = 'SUBSECTION: ' . $arSection['ID'] . ' ' . $arSection['NAME']; // Собираем элементы из подраздела третьего уровня if (!collectElements($arSection['ID'], $brand, $countForSection, $arElementsNew, $arElementsHit, $arLog, $countMax)) { break; // Прерываем, если достигли максимального количества элементов } } } // echo '<pre>' . print_r([ // 'Log' => $arLog, // 'ElementsNew' => $arElementsNew, // 'ElementsHit' => $arElementsHit, // ], true) . '</pre>'; ?> <? if (is_array($arElementsNew) && !empty($arElementsNew)) { global $FilterBrand; $FilterBrand = [ 'ID' => $arElementsNew, 'PROPERTY_BRAND_LOGO' => $arParams["BRAND"], ]; // Передаем данные в компонент $APPLICATION->IncludeComponent( "bitrix:catalog.section", "brand-slider", array( "ACTION_VARIABLE" => "action", "ADD_PICT_PROP" => "-", "ADD_PROPERTIES_TO_BASKET" => "Y", "ADD_SECTIONS_CHAIN" => "N", "ADD_TO_BASKET_ACTION" => "ADD", "AJAX_MODE" => "N", "AJAX_OPTION_ADDITIONAL" => "", "AJAX_OPTION_HISTORY" => "N", "AJAX_OPTION_JUMP" => "N", "AJAX_OPTION_STYLE" => "Y", "BACKGROUND_IMAGE" => "-", "BASKET_URL" => "/personal/basket/", "BROWSER_TITLE" => "-", "CACHE_FILTER" => "N", "CACHE_GROUPS" => "Y", "CACHE_TIME" => "36000000", "CACHE_TYPE" => "A", "COMPATIBLE_MODE" => "N", "CONVERT_CURRENCY" => "N", "CUSTOM_FILTER" => json_encode($componentData), // Передаем данные в компонент "DETAIL_URL" => "", "DISABLE_INIT_JS_IN_COMPONENT" => "N", "DISPLAY_BOTTOM_PAGER" => "N", "DISPLAY_COMPARE" => "N", "DISPLAY_TOP_PAGER" => "N", "ELEMENT_SORT_FIELD" => "sort_level_one", // Сортировка по первому уровню "ELEMENT_SORT_FIELD2" => "sort_level_two", // Сортировка по второму уровню "ELEMENT_SORT_ORDER" => "asc", // Порядок сортировки по первому уровню "ELEMENT_SORT_ORDER2" => "asc", // Порядок сортировки по второму уровню "ENLARGE_PRODUCT" => "STRICT", "FILTER_NAME" => "FilterBrand", "HIDE_NOT_AVAILABLE" => "", "HIDE_NOT_AVAILABLE_OFFERS" => "", "IBLOCK_ID" => "10", "IBLOCK_TYPE" => "1c_catalog", "INCLUDE_SUBSECTIONS" => "Y", "LABEL_PROP" => array(), "LAZY_LOAD" => "N", "LINE_ELEMENT_COUNT" => "3", "LOAD_ON_SCROLL" => "N", "MESSAGE_404" => "", "MESS_BTN_ADD_TO_BASKET" => "В корзину", "MESS_BTN_BUY" => "Купить", "MESS_BTN_DETAIL" => "Подробнее", "MESS_BTN_LAZY_LOAD" => "Показать ещё", "MESS_BTN_SUBSCRIBE" => "Подписаться", "MESS_NOT_AVAILABLE" => "Нет в наличии", "MESS_NOT_AVAILABLE_SERVICE" => "Недоступно", "META_DESCRIPTION" => "-", "META_KEYWORDS" => "-", "OFFERS_LIMIT" => "5", "PAGER_BASE_LINK_ENABLE" => "N", "PAGER_DESC_NUMBERING" => "N", "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", "PAGER_SHOW_ALL" => "N", "PAGER_SHOW_ALWAYS" => "N", "PAGER_TEMPLATE" => ".default", "PAGER_TITLE" => "Товары", "PAGE_ELEMENT_COUNT" => "120", "PARTIAL_PRODUCT_PROPERTIES" => "N", "PRICE_CODE" => array( 0 => "PRICE_UR", 1 => "PRICE_FIZ", ), "PRICE_VAT_INCLUDE" => "Y", "PRODUCT_BLOCKS_ORDER" => "price,props,sku,quantityLimit,quantity,buttons", "PRODUCT_ID_VARIABLE" => "id", "PRODUCT_PROPS_VARIABLE" => "prop", "PRODUCT_QUANTITY_VARIABLE" => "quantity", "PRODUCT_ROW_VARIANTS" => "[{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false}]", "PRODUCT_SUBSCRIPTION" => "Y", "PROPERTY_CODE_MOBILE" => array(), "RCM_PROD_ID" => isset($_REQUEST["PRODUCT_ID"]) ? $_REQUEST["PRODUCT_ID"] : '', "RCM_TYPE" => "personal", "SECTION_CODE" => "", "SECTION_ID" => "", "SECTION_ID_VARIABLE" => "SECTION_ID", "SECTION_URL" => "", "SECTION_USER_FIELDS" => array( 0 => "", 1 => "", ), "SEF_MODE" => "N", "SET_BROWSER_TITLE" => "Y", "SET_LAST_MODIFIED" => "N", "SET_META_DESCRIPTION" => "Y", "SET_META_KEYWORDS" => "Y", "SET_STATUS_404" => "N", "SET_TITLE" => "Y", "SHOW_404" => "N", "SHOW_ALL_WO_SECTION" => "N", "SHOW_CLOSE_POPUP" => "N", "SHOW_DISCOUNT_PERCENT" => "N", "SHOW_FROM_SECTION" => "N", "SHOW_MAX_QUANTITY" => "N", "SHOW_OLD_PRICE" => "N", "SHOW_PRICE_COUNT" => "1", "SHOW_SLIDER" => "Y", "SLIDER_INTERVAL" => "3000", "SLIDER_PROGRESS" => "N", "TEMPLATE_THEME" => "blue", "USE_ENHANCED_ECOMMERCE" => "N", "USE_MAIN_ELEMENT_SECTION" => "N", "USE_PRICE_COUNT" => "N", "USE_PRODUCT_QUANTITY" => "N", "COMPONENT_TEMPLATE" => "brand-slider" ), false ); } if (is_array($arElementsHit) && !empty($arElementsHit)) { global $FilterBrandHit; $FilterBrandHit = [ 'ID' => $arElementsHit, 'PROPERTY_BRAND_LOGO' => $brand, ]; $APPLICATION->IncludeComponent( "bitrix:catalog.section", "brand-slider-hit", array( "ACTION_VARIABLE" => "action", "ADD_PICT_PROP" => "-", "ADD_PROPERTIES_TO_BASKET" => "Y", "ADD_SECTIONS_CHAIN" => "N", "ADD_TO_BASKET_ACTION" => "ADD", "AJAX_MODE" => "N", "AJAX_OPTION_ADDITIONAL" => "", "AJAX_OPTION_HISTORY" => "N", "AJAX_OPTION_JUMP" => "N", "AJAX_OPTION_STYLE" => "Y", "BACKGROUND_IMAGE" => "-", "BASKET_URL" => "/personal/basket/", "BROWSER_TITLE" => "-", "CACHE_FILTER" => "N", "CACHE_GROUPS" => "Y", "CACHE_TIME" => "36000000", "CACHE_TYPE" => "A", "COMPATIBLE_MODE" => "N", "CONVERT_CURRENCY" => "N", "CUSTOM_FILTER" => "{\"CLASS_ID\":\"CondGroup\",\"DATA\":{\"All\":\"AND\",\"True\":\"True\"},\"CHILDREN\":[]}", "DETAIL_URL" => "", "DISABLE_INIT_JS_IN_COMPONENT" => "N", "DISPLAY_BOTTOM_PAGER" => "N", "DISPLAY_COMPARE" => "N", "DISPLAY_TOP_PAGER" => "N", "ELEMENT_SORT_FIELD" => "sort", "ELEMENT_SORT_FIELD2" => "id", "ELEMENT_SORT_ORDER" => "asc", "ELEMENT_SORT_ORDER2" => "desc", "ENLARGE_PRODUCT" => "STRICT", "FILTER_NAME" => "FilterBrandHit", "HIDE_NOT_AVAILABLE" => "", "HIDE_NOT_AVAILABLE_OFFERS" => "", "IBLOCK_ID" => "10", "IBLOCK_TYPE" => "1c_catalog", "INCLUDE_SUBSECTIONS" => "Y", "LABEL_PROP" => array( ), "LAZY_LOAD" => "N", "LINE_ELEMENT_COUNT" => "3", "LOAD_ON_SCROLL" => "N", "MESSAGE_404" => "", "MESS_BTN_ADD_TO_BASKET" => "В корзину", "MESS_BTN_BUY" => "Купить", "MESS_BTN_DETAIL" => "Подробнее", "MESS_BTN_LAZY_LOAD" => "Показать ещё", "MESS_BTN_SUBSCRIBE" => "Подписаться", "MESS_NOT_AVAILABLE" => "Нет в наличии", "MESS_NOT_AVAILABLE_SERVICE" => "Недоступно", "META_DESCRIPTION" => "-", "META_KEYWORDS" => "-", "OFFERS_LIMIT" => "5", "PAGER_BASE_LINK_ENABLE" => "N", "PAGER_DESC_NUMBERING" => "N", "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", "PAGER_SHOW_ALL" => "N", "PAGER_SHOW_ALWAYS" => "N", "PAGER_TEMPLATE" => ".default", "PAGER_TITLE" => "Товары", "PAGE_ELEMENT_COUNT" => "120", "PARTIAL_PRODUCT_PROPERTIES" => "N", "PRICE_CODE" => array( 0 => "PRICE_UR", 1 => "PRICE_FIZ", ), "PRICE_VAT_INCLUDE" => "Y", "PRODUCT_BLOCKS_ORDER" => "price,props,sku,quantityLimit,quantity,buttons", "PRODUCT_ID_VARIABLE" => "id", "PRODUCT_PROPS_VARIABLE" => "prop", "PRODUCT_QUANTITY_VARIABLE" => "quantity", "PRODUCT_ROW_VARIANTS" => "[{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false},{'VARIANT':'2','BIG_DATA':false}]", "PRODUCT_SUBSCRIPTION" => "Y", "PROPERTY_CODE_MOBILE" => array( ), "RCM_PROD_ID" => isset($_REQUEST["PRODUCT_ID"]) ? $_REQUEST["PRODUCT_ID"] : '', "RCM_TYPE" => "personal", "SECTION_CODE" => "", "SECTION_ID" => "", "SECTION_ID_VARIABLE" => "SECTION_ID", "SECTION_URL" => "", "SECTION_USER_FIELDS" => array( 0 => "", 1 => "", ), "SEF_MODE" => "N", "SET_BROWSER_TITLE" => "Y", "SET_LAST_MODIFIED" => "N", "SET_META_DESCRIPTION" => "Y", "SET_META_KEYWORDS" => "Y", "SET_STATUS_404" => "N", "SET_TITLE" => "Y", "SHOW_404" => "N", "SHOW_ALL_WO_SECTION" => "N", "SHOW_CLOSE_POPUP" => "N", "SHOW_DISCOUNT_PERCENT" => "N", "SHOW_FROM_SECTION" => "N", "SHOW_MAX_QUANTITY" => "N", "SHOW_OLD_PRICE" => "N", "SHOW_PRICE_COUNT" => "1", "SHOW_SLIDER" => "Y", "SLIDER_INTERVAL" => "3000", "SLIDER_PROGRESS" => "N", "TEMPLATE_THEME" => "blue", "USE_ENHANCED_ECOMMERCE" => "N", "USE_MAIN_ELEMENT_SECTION" => "N", "USE_PRICE_COUNT" => "N", "USE_PRODUCT_QUANTITY" => "N", "COMPONENT_TEMPLATE" => "brand-slider-hit" ), false ); } ?>