Как с помощью «Умного фильтра» и catalog.section вывести несколько товаров из разных разделов?
Хочу в catalog.section вывести несколько товаров из разных разделов. У меня есть массив с id элементов. И массив с id их раздела.
В префильтре фильтрую по элементам.
$GLOBALS['presect'] = array("ID"=>$arrFiltrId);
в фильтре id раздела ставлю- первый элемент массива, как я понял по другому никак:
"SECTION_ID" => $sectId[0]
bitrix:catalog.smart.filter
<?$APPLICATION->IncludeComponent( "bitrix:catalog.smart.filter", "main2", array( "COMPONENT_TEMPLATE" => "main2", "IBLOCK_TYPE" => "aspro_next_catalog", "IBLOCK_ID" => "18", "SECTION_ID" => $sectId[0], "SECTION_CODE" => "", "PREFILTER_NAME" => "presect", "FILTER_NAME" => "smartPreFilter", "HIDE_NOT_AVAILABLE" => "N", "TEMPLATE_THEME" => "blue", "FILTER_VIEW_MODE" => "vertical", "DISPLAY_ELEMENT_COUNT" => "Y", "SEF_MODE" => "N", "CACHE_TYPE" => "N", "CACHE_TIME" => "36000000", "CACHE_GROUPS" => "Y", "SAVE_IN_SESSION" => "N", "INSTANT_RELOAD" => "Y", "PAGER_PARAMS_NAME" => "arrPager", "CONVERT_CURRENCY" => "Y", "XML_EXPORT" => "N", "SECTION_TITLE" => "-", "SECTION_DESCRIPTION" => "-", "POPUP_POSITION" => "left", "SEF_RULE" => "/catalog/#SECTION_ID#/filter/#SMART_FILTER_PATH#/apply/", "SECTION_CODE_PATH" => "", "SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"], "CURRENCY_ID" => "RUB", "COMPOSITE_FRAME_MODE" => "A", "COMPOSITE_FRAME_TYPE" => "AUTO", "PRICE_CODE" => array( 0 => "Интернет магазин (Магазин)", ), false );?> |
<?$APPLICATION->IncludeComponent( "bitrix:catalog.smart.filter", "main2", array( "COMPONENT_TEMPLATE" => "main2", "IBLOCK_TYPE" => "aspro_next_catalog", "IBLOCK_ID" => "18", "SECTION_ID" => $sectId[0], "SECTION_CODE" => "", "PREFILTER_NAME" => "presect", "FILTER_NAME" => "smartPreFilter", "HIDE_NOT_AVAILABLE" => "N", "TEMPLATE_THEME" => "blue", "FILTER_VIEW_MODE" => "vertical", "DISPLAY_ELEMENT_COUNT" => "Y", "SEF_MODE" => "N", "CACHE_TYPE" => "N", "CACHE_TIME" => "36000000", "CACHE_GROUPS" => "Y", "SAVE_IN_SESSION" => "N", "INSTANT_RELOAD" => "Y", "PAGER_PARAMS_NAME" => "arrPager", "CONVERT_CURRENCY" => "Y", "XML_EXPORT" => "N", "SECTION_TITLE" => "-", "SECTION_DESCRIPTION" => "-", "POPUP_POSITION" => "left", "SEF_RULE" => "/catalog/#SECTION_ID#/filter/#SMART_FILTER_PATH#/apply/", "SECTION_CODE_PATH" => "", "SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"], "CURRENCY_ID" => "RUB", "COMPOSITE_FRAME_MODE" => "A", "COMPOSITE_FRAME_TYPE" => "AUTO", "PRICE_CODE" => array( 0 => "Интернет магазин (Магазин)", ), false );?>
bitrix:catalog.section
<?$APPLICATION->IncludeComponent( "bitrix:catalog.section", $display, array( "ACTION_VARIABLE" => "action", "ADD_PICT_PROP" => "MORE_PHOTO", "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", "BASKET_URL" => "/personal/cart/", "BROWSER_TITLE" => "-", "CACHE_FILTER" => "N", "CACHE_GROUPS" => "Y", "CACHE_TIME" => "36000000", "CACHE_TYPE" => "N", "COMPONENT_TEMPLATE" => "catalog_block_custom", "CONVERT_CURRENCY" => "N", "DETAIL_URL" => "", "DISPLAY_BOTTOM_PAGER" => "Y", "DISPLAY_TOP_PAGER" => "N", "ELEMENT_SORT_FIELD" => "name", "ELEMENT_SORT_FIELD2" => "shows", "ELEMENT_SORT_ORDER" => "asc", "ELEMENT_SORT_ORDER2" => "asc", "FILTER_NAME" => "smartPreFilter", "HIDE_NOT_AVAILABLE" => "Y", "IBLOCK_ID" => "18", "IBLOCK_TYPE" => "aspro_next_catalog", "IBLOCK_TYPE_ID" => "catalog", "INCLUDE_SUBSECTIONS" => "Y", "LABEL_PROP" => array( 0 => "", ), "LINE_ELEMENT_COUNT" => "3", "MESSAGE_404" => "", "MESS_BTN_ADD_TO_BASKET" => "В корзину", "MESS_BTN_BUY" => "Купить", "MESS_BTN_DETAIL" => "Подробнее", "MESS_BTN_SUBSCRIBE" => "Подписаться", "MESS_NOT_AVAILABLE" => "Нет в наличии", "META_DESCRIPTION" => "-", "META_KEYWORDS" => "-", "OFFERS_CART_PROPERTIES" => array( 0 => "COLOR_REF", 1 => "SIZES_SHOES", 2 => "SIZES_CLOTHES", ), "OFFERS_FIELD_CODE" => array( 0 => "", 1 => "", ), "OFFERS_LIMIT" => "5", "OFFERS_PROPERTY_CODE" => array( 0 => "", 1 => "", ), "OFFERS_SORT_FIELD" => "shows", "OFFERS_SORT_FIELD2" => "shows", "OFFERS_SORT_ORDER" => "asc", "OFFERS_SORT_ORDER2" => "asc", "OFFER_ADD_PICT_PROP" => "-", "OFFER_TREE_PROPS" => array( 0 => "COLOR_REF", 1 => "SIZES_SHOES", 2 => "SIZES_CLOTHES", ), "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" => "arrows", "PAGER_TITLE" => "Товары", "PAGE_ELEMENT_COUNT" => "60", "PARTIAL_PRODUCT_PROPERTIES" => "Y", "PRICE_CODE" => array( 0 => "Интернет магазин (Магазин)", ), "PRICE_VAT_INCLUDE" => "Y", "PRODUCT_DISPLAY_MODE" => "Y", "PRODUCT_ID_VARIABLE" => "id", "PRODUCT_PROPERTIES" => "", "PRODUCT_PROPS_VARIABLE" => "prop", "PRODUCT_QUANTITY_VARIABLE" => "", "PRODUCT_SUBSCRIPTION" => "N", "PROPERTY_CODE" => array( 0 => "NEWPRODUCT", ), "SECTION_CODE" => "", "SECTION_ID_VARIABLE" => "SECTION_ID", "SECTION_URL" => "", "SECTION_USER_FIELDS" => array( 0 => "UF_SECTION_DESCR", 1 => "UF_SECTION_TEMPLATE", 2 => "UF_TIZERS", 3 => "UF_POPULAR", 4 => "UF_CATALOG_ICON", 5 => "UF_OFFERS_TYPE", 6 => "UF_ELEMENT_DETAIL", 7 => "UF_TABLE_SIZES", 8 => "UF_FILTER_VIEW", 9 => "UF_REGION", 10 => "UF_SHORT_PROPERTIES", 11 => "UF_ANALOG_PROPERTY_CODES", 12 => "UF_INDEX_NUMBER", 13 => "", ), "USE_FILTER" => "Y", "TITLE_BLOCK" => "", "SHOW_MEASURE" => "Y", "SECTION_ID" =>$sectId[0], "ELEMENT_SORT_FIELD" => $sort, "PAGE_ELEMENT_COUNT" => $pageCount, "INCLUDE_SUBSECTIONS" => "Y", "SHOW_ALL_WO_SECTION" => "Y", ), false );?> |
<?$APPLICATION->IncludeComponent( "bitrix:catalog.section", $display, array( "ACTION_VARIABLE" => "action", "ADD_PICT_PROP" => "MORE_PHOTO", "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", "BASKET_URL" => "/personal/cart/", "BROWSER_TITLE" => "-", "CACHE_FILTER" => "N", "CACHE_GROUPS" => "Y", "CACHE_TIME" => "36000000", "CACHE_TYPE" => "N", "COMPONENT_TEMPLATE" => "catalog_block_custom", "CONVERT_CURRENCY" => "N", "DETAIL_URL" => "", "DISPLAY_BOTTOM_PAGER" => "Y", "DISPLAY_TOP_PAGER" => "N", "ELEMENT_SORT_FIELD" => "name", "ELEMENT_SORT_FIELD2" => "shows", "ELEMENT_SORT_ORDER" => "asc", "ELEMENT_SORT_ORDER2" => "asc", "FILTER_NAME" => "smartPreFilter", "HIDE_NOT_AVAILABLE" => "Y", "IBLOCK_ID" => "18", "IBLOCK_TYPE" => "aspro_next_catalog", "IBLOCK_TYPE_ID" => "catalog", "INCLUDE_SUBSECTIONS" => "Y", "LABEL_PROP" => array( 0 => "", ), "LINE_ELEMENT_COUNT" => "3", "MESSAGE_404" => "", "MESS_BTN_ADD_TO_BASKET" => "В корзину", "MESS_BTN_BUY" => "Купить", "MESS_BTN_DETAIL" => "Подробнее", "MESS_BTN_SUBSCRIBE" => "Подписаться", "MESS_NOT_AVAILABLE" => "Нет в наличии", "META_DESCRIPTION" => "-", "META_KEYWORDS" => "-", "OFFERS_CART_PROPERTIES" => array( 0 => "COLOR_REF", 1 => "SIZES_SHOES", 2 => "SIZES_CLOTHES", ), "OFFERS_FIELD_CODE" => array( 0 => "", 1 => "", ), "OFFERS_LIMIT" => "5", "OFFERS_PROPERTY_CODE" => array( 0 => "", 1 => "", ), "OFFERS_SORT_FIELD" => "shows", "OFFERS_SORT_FIELD2" => "shows", "OFFERS_SORT_ORDER" => "asc", "OFFERS_SORT_ORDER2" => "asc", "OFFER_ADD_PICT_PROP" => "-", "OFFER_TREE_PROPS" => array( 0 => "COLOR_REF", 1 => "SIZES_SHOES", 2 => "SIZES_CLOTHES", ), "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" => "arrows", "PAGER_TITLE" => "Товары", "PAGE_ELEMENT_COUNT" => "60", "PARTIAL_PRODUCT_PROPERTIES" => "Y", "PRICE_CODE" => array( 0 => "Интернет магазин (Магазин)", ), "PRICE_VAT_INCLUDE" => "Y", "PRODUCT_DISPLAY_MODE" => "Y", "PRODUCT_ID_VARIABLE" => "id", "PRODUCT_PROPERTIES" => "", "PRODUCT_PROPS_VARIABLE" => "prop", "PRODUCT_QUANTITY_VARIABLE" => "", "PRODUCT_SUBSCRIPTION" => "N", "PROPERTY_CODE" => array( 0 => "NEWPRODUCT", ), "SECTION_CODE" => "", "SECTION_ID_VARIABLE" => "SECTION_ID", "SECTION_URL" => "", "SECTION_USER_FIELDS" => array( 0 => "UF_SECTION_DESCR", 1 => "UF_SECTION_TEMPLATE", 2 => "UF_TIZERS", 3 => "UF_POPULAR", 4 => "UF_CATALOG_ICON", 5 => "UF_OFFERS_TYPE", 6 => "UF_ELEMENT_DETAIL", 7 => "UF_TABLE_SIZES", 8 => "UF_FILTER_VIEW", 9 => "UF_REGION", 10 => "UF_SHORT_PROPERTIES", 11 => "UF_ANALOG_PROPERTY_CODES", 12 => "UF_INDEX_NUMBER", 13 => "", ), "USE_FILTER" => "Y", "TITLE_BLOCK" => "", "SHOW_MEASURE" => "Y", "SECTION_ID" =>$sectId[0], "ELEMENT_SORT_FIELD" => $sort, "PAGE_ELEMENT_COUNT" => $pageCount, "INCLUDE_SUBSECTIONS" => "Y", "SHOW_ALL_WO_SECTION" => "Y", ), false );?>
Дополнительно:
Первое: если у Вас есть ID элементов, зачем вообще указывать раздел? Ставьте везде, где надо "SECTION_ID" =>0, "INCLUDE_SUBSECTIONS" => "Y",
Если нужно фильтровать и по разделам, укажите их в том же фильтре
$presect=['IBLOCK_SECTION_ID' => $sectId, "ID"=>$arrFiltrId]; |
$presect=['IBLOCK_SECTION_ID' => $sectId, "ID"=>$arrFiltrId];
Кстати, не очень удачные названия для переменных: $sectId - предположительно, здесь должно быть число, единственный айдишник. $sectIdList лучше. И можно не сокращать, современные редакторы кода умеют дополнять на лету; $sectionIdList читается легче, а код пишется для людей.
$arrFiltrId - аналогично, я бы предположил, что здесь Id какой-то сущности, обозначенной как $arrFiltr. И вот эти дурацкие приставки "arr" из псевдовенгерской нотации - выкиньте их. Битриксоиды не могут, они уже насквозь испорчены этим, а Вам ещё не поздно исправиться.
$elementIdList читабельнее. ( я даже не против $tovarIdList , хоть и не сторонник русификации )
Жаль, что не помогло, но такие подлянки с Битриксом на каждом шагу...
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для вывода нескольких товаров из разных разделов с помощью «Умного фильтра» и функции catalog.section вам необходимо использовать параметр FILTER, который позволит выбрать нужные разделы. Вот пример кода на языке PHP:
1, // ID инфоблока "SECTION_ID" => 0, // ID раздела (можно не указывать) "FILTER_NAME" => "arrFilter", // название переменной фильтра "INCLUDE_SUBSECTIONS" => "Y", // включать товары из подразделов "SHOW_ALL_WO_SECTION" => "Y", // показывать все товары без раздела "PAGE_ELEMENT_COUNT" => 5, // количество товаров на странице "CACHE_TYPE" => "A", // тип кеширования "CACHE_TIME" => 36000000, // время кеширования ); $arrFilter = array( "LOGIC" => "OR", // логика фильтрации (ИЛИ) array("SECTION_ID" => 10), // ID раздела 1 array("SECTION_ID" => 20), // ID раздела 2 ); $arParams["arrFilter"] = $arrFilter; $APPLICATION->IncludeComponent( "bitrix:catalog.section", "", $arParams ); ?>
В данном примере мы задаем параметры компонента catalog.section, указываем ID инфоблока, задаем FILTER_NAME для фильтрации товаров из разных разделов. В массиве arrFilter мы указываем логику "OR" (ИЛИ) и перечисляем ID разделов, из которых нужно вывести товары.
После подключения компонента и передачи всех необходимых параметров, на странице будут выведены товары из разделов с ID 10 и 20. Вы можете добавить или изменить условия фильтрации, чтобы выбирать нужные разделы и товары.