Ссылка на товары бренда в каталоге с автоматическим применением умного фильтра

Просмотров: 2661

Задача: вывести товары на странице бренда, выведенного компонентом "Новости", с ссылками на разделы в каталоге с применением умного фильтра.

Данная заметка продолжение к:
Отфильтровать товары бренда и вывести по разделам каталога
Вывести товары на странице бренда

Получение XML-id значения типа список через API Битрикс

Для создания ссылки на результат фильтрации умного фильтра, нам нужно получить XML-id значения с указанным брендом. Привожу весь код целиком, размещаем его в component_epilog.php шаблона детальной новости, пояснения ниже:

$iblockId = 4;
$brandName = $arResult['NAME'];

$GLOBALS['arrFilterBrand'] = array(
    "PROPERTY_PROIZVODITEL_VALUE" => $brandName
);

// Получаем XML ID значения свойства для ссылки на фильтр
$propertyRes = \Bitrix\Iblock\PropertyTable::getList([
    'filter' => [
        'IBLOCK_ID' => $iblockId,
        'CODE' => 'PROIZVODITEL'
    ],
    'select' => ['ID']
]);
if ($property = $propertyRes->fetch()) {
    // Получаем значения списка
    $enumRes = \Bitrix\Iblock\PropertyEnumerationTable::getList([
        'filter' => [
            'PROPERTY_ID' => $property['ID'],
            'VALUE' => $brandName
        ],
        'select' => [
            'ID',
            'XML_ID'
        ]
    ]);

    if ($enum = $enumRes->fetch()) {
        $propXmlId = $enum['XML_ID'];
    }
}
// end Получаем XML ID значения свойства для ссылки на фильтр


// Получаем ссылки на разделы с этим брендом
$listGoods = CIBlockElement::GetList(
    false,
    array(
        'IBLOCK_ID' => $iblockId,
        'PROPERTY_PROIZVODITEL_VALUE' => $brandName,
        'ACTIVE' => 'Y'
    ),
    false,
    false,
    array('ID')
);
while ($goods = $listGoods->Fetch()) {
    $ElementId = $goods['ID'];
    $db_groups = CIBlockElement::GetElementGroups(
        $ElementId,
        true,
    );
    while ($ar_group = $db_groups->GetNext()) {
        $arSections[$ar_group['ID']]['NAME'] = $ar_group['NAME'];
        $arSections[$ar_group['ID']]['URL'] = $ar_group['SECTION_PAGE_URL'] . 'find/proizvoditel-is-' . $propXmlId . '/apply/';
    }
}
// end Получаем ссылки на разделы с этим брендом

foreach ($arSections as $k => $arSection) { ?>
   <a href="<?= $arSection['URL'] ?>">
      <?= $arSection['NAME'] ?>
   </a>
<?}
$APPLICATION->IncludeComponent(
        "bitrix:catalog.section",
        "section",
        array(
          // Это компонент раздела выводящий все товары бренда
            "FILTER_NAME" => "arrFilterBrand",
        ),
        false
);?>

Для начала, в коде задаются необходимые переменные: ID инфоблока, содержащего товары, и название бренда, которое берется из газвания "Новости" $arResult['NAME']. Далее, создается глобальный фильтр $GLOBALS['arrFilterBrand'], чтобы в дальнейшем при выборке товаров учитывать производителя.

Затем идет получение XML-ID значения свойства "Производитель". Это нужно для того, чтобы корректно сформировать ссылки на страницы разделов каталога с примененным умным фильтром. Используя класс \Bitrix\Iblock\PropertyTable, сначала мы находим ID свойства "PROIZVODITEL" в инфоблоке. После этого, через \Bitrix\Iblock\PropertyEnumerationTable, по найденному ID свойства и имени бренда получаем XML-ID нужного значения. Этот XML-ID будет использован в ссылках на страницы с фильтрацией.

После получения XML-ID происходит выборка товаров, относящихся к данному бренду. Это делается с помощью метода CIBlockElement::GetList(), где фильтруются только активные товары по инфоблоку и значению свойства "Производитель". Для каждого найденного товара с помощью метода CIBlockElement::GetElementGroups() определяется, в каких разделах каталога этот товар находится.

На следующем этапе для каждого раздела, в котором присутствует товар данного бренда, формируется ссылка с фильтрацией по XML-ID производителя. Ссылки строятся на основе базового URL раздела каталога, добавляя в конец строки параметр фильтрации вида:
find/proizvoditel-is-..XML_ID../apply/.

Заключительным шагом является вывод полученных ссылок на разделы каталога. Каждая ссылка отображает название раздела и ведет на страницу с товарами, отфильтрованными по бренду, что позволяет пользователям быстро найти товары конкретного производителя в нужных разделах.

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 6-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.