Думаю многие сталкивались со следующей проблемой. Сделали каталог товаров, настроили умный фильтр в категориях товаров. Но заказчику потребовались страницы, отличные от страниц категорий. Приведу примеры из практики:

  • страницы-подборки товаров по определенной теме. Обычно они определены списком товаров, которые нужно вывести на странице;
  • страницы брендов, коллекции товаров. Такие страницы содержат товары с определенным значения соответствующего свойства;
  • новинки/хиты/спецпредложения - по наличию у товара флага.

Всех их объединяет одно: можно отфильтровать выдачу товаров в catalog.section (параметр FILTER_NAME), но фильтра для catalog.smart.filter не существовало. В целом, всё работало нормально, но в фильтре были лишние варианты, счетчики подходящих товаров выводили неправильные значения.

Обычно разработчики либо переписывали фильтр на кастомное решение, либо создавали костыли.

В версии модуля iblock 18.6.200 добавили возможность предварительной фильтрации. Фильтр задается параметром PREFILTER_NAME компонента catalog.smart.filter. Для примера попробуем вывести страницу каталога, на которой будут выведены товары с ID 14, 15, 16:

global $smartPreFilter;
$smartPreFilter = [
    'ID' => [14, 15, 16],
];
$APPLICATION->IncludeComponent(
    "bitrix:catalog.smart.filter", 
    ".default", 
    array(
        //...
        "FILTER_NAME" => "arrFilter",
        "PREFILTER_NAME" => "smartPreFilter",
        //...
    ),
    $component,
    array('HIDE_ICONS' => 'Y')
);
var_dump($GLOBALS['arrFilter']);
// array(1) { ["ID"]=> array(3) { [0]=> int(14) [1]=> int(15) [2]=> int(16) } }
$APPLICATION->IncludeComponent(
    "bitrix:catalog.section.list",
    ".default",
    array(
        "FILTER_NAME" => "arrFilter",
    ),
    $component,
    array("HIDE_ICONS" => "Y")
);

Видим, что на странице категории вывелись лишь три товара (так было бы и раньше) и в фильтре доступны лишь значения, относящиеся к этой выборке: catalog1.png

Таким же образом выведем на страницу категории новинки:

$smartPreFilter = [
    'PROPERTY_NEWPRODUCT' => 1,
];

catalog2.png