Разработка интернет магазина на Битрикс — добавление умного фильтра на главную страницу


Итак, продолжаю доработки интернет-магазина Планета обоев на движке Битрикс, фактически знакомство с этим модулем.
Кратко о том, что уже сделал:
* Импорт каталога из выгрузки 1С сделал полностью с нуля свой — так я полностью контролирую процесс 🙂
* Прикрутил «обратный звонок»
* Прикрутил «прокрутку к началу страницы»
* Прикрутил «почтовик» — отправка писем через сторонний SMTP сервер (в моём случае это yandex т.к. почту домена в виде @dekorplanet.ru прикрутил именно туда) — так адресат увидит свои письма с гораздо большей вероятностью 😉
* Воткнул сторонний слайдер (тут ещё видимо буду переделывать)
остальные модули стандартные Битриксовые
* В целях сбора поискового трафика подготовлены отдельные страницы с уже отфильтрованными товарами * 3D Обои, Детские обои и т.д. (есть сомнения в правильности реализации — тут тоже не закрыто)

Решил «прикрутить» на главную фильтр! а именно в область под вертикальным меню слева
Под эту задачу отлично подошла статья Дмитрия Акифьева Перенос умного фильтра в Битриксе

Результат:
smartfilter-1

Всё описанное в видео получилось сразу НО мне захотелось большего — прикрутить умный фильтр на главную страницу сайта (имхо там ему и место).
Добавил смарт фильтр на морду в тоже место — не пашет. Не работает как подсчёт количества, так и переход по кнопке.
Ответ Дмитрия на мои вопросы оптимизма не придал:
* «Умный фильтр работает в жесткой сцепке с компонентом списка товаров. Если на странице нет списка товаров, то и отбирать нечего и фильтр бесполезен.»
* «Делайте свой компонент, реализуйте в нем нужную логику (из каких инфоблоков что берет, как фильтрует, сортирует и т.д. ), делаете для этого компонента шаблоны и выводите все это безобразие на любой странице.»

Что придало уверенности так это то, что фильтр правильно увидел все характеристики и «подтянул» их для выбора, так же я знаю что по сути работа фильтра — это генерация GET запроса в массив фильтра arrFilter, который уже может подхватываться любым компонентом отображающим товары, а запрос этот фильтр генерирует верно.
Значит по сути должно работать — осталось просто разобраться почему не пашет и починить 🙂

smartfilter-2

Первое — это корректировка темлейта фильтра на предмет form action на страницу с каталогом, проверка — работает!

Далее разбирался с AJAX подсчётом товара — роем компонент:
В фильтр передаётся значение SECTION_ID через GET параметр, соответственно для морды у меня SECTION_ID = 0 и он же передаётся в $arrFiler GetList
Добавляем в компонент проверку
if ($arFilter[‘SECTION_ID’]==0) unset($arFilter[‘SECTION_ID’]);
и подсчёт тоже начинает работать корректно!

smartfilter-3

Одно НО — ссылка в появляющемся окошке должна так же вести на каталог.
Т.к. окошко появляется — это явно Javascript + Ajax — роем script.js в темлейте и обнаруживаем необходимый нам код

hrefFILTER[0].href = BX.Utils……….
который меняем на
hrefFILTER[0].href = ‘/catalog/oboi’+BX.Utils……….

Вуаля! Всё пашет!

Одна проблемка — внешний фильтр работает с каталогом только при включенном в комплексе умным фильтром (тут ещё не ковырял)
Временно, в качестве выхода из положения, на страницы каталога оставил внутренний фильтр, а на внешние странички прикрутил отдельный.


4 комментария на «“Разработка интернет магазина на Битрикс — добавление умного фильтра на главную страницу”»

  1. Добрый день!
    Может Вы подскажете куда рыть, делал все также с фильтром, только он у меня на странице с комплексным каталогом,
    не отображается подсчет товара.
    я в шаблоне страницы раздела добавил
    $this->SetViewTarget(«vmaster_filter»);
    и в footer добавил ShowViewContent(«vmaster_filter»);?>
    в общем все как у Дмитрия в уроке

  2. Добрый день! Сделал как у вас написано, но фильтр внешний на главной не хочет работать. Заменил ссылку в sript.js, но перехода не происходит на главную. все выше написанные настройки я проводил в шаблоне умного фильтра.
    Куда конкретно вставлять if ($arFilter[‘SECTION_ID’]==0) unset ($arFilter[‘SECTION_ID’]);
    За ранее спасибо!

  3. Ребят, чтоб фильтр выдавал количество найденных товаров при отметках в чекбоксах:
    ВАШ САЙТ/bitrix/components/bitrix/catalog.smart.filter, открываем component.php
    и после

    if(isset($_REQUEST[«ajax»]) && $_REQUEST[«ajax»] === «y»)
    {
    $arFilter = $this->makeFilter($FILTER_NAME);

    Пишем:

    if($arFilter[SECTION_ID]==0) unset($arFilter[SECTION_ID]);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *