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


Итак, продолжаю доработки интернет-магазина Планета обоев на движке Битрикс, фактически знакомство с этим модулем.
Кратко о том, что уже сделал:
* Импорт каталога из выгрузки 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 не будет опубликован. Обязательные поля помечены *