Используя arFilter вы избавите себя от лишних проверок

Что такое умный фильтр в Битрикс (bitrix:catalog.smart.filter)

Очень часто у пользователей интернет-магазина возникает потребность моментально создать свою собственную выборку товаров или других элементов. Чаще выборка создается не по ключевому слову, а по определенным значениям свойств элементов.

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

Вот так выглядит умный фильтр в интернет-магазине

Средство, позволяющие отфильтровать элементы по определенным характеристикам — это и есть умный фильтр (Smart Filter). На фото он выделен красным, а сами характеристики — фиолетовым. В этой статье мы подробнее расскажем о том, как работает умный фильтр на самой популярной CMS — «Битрикс», как его настраивать и кастомизировать.

Что вам нужно знать об умном фильтре

Умный фильтр — это многофункциональный инструмент, входящий в базовую комплектацию CMS Bitrix. Этот компонент позволяет осуществлять поиск по заданным параметрам товаров интернет-магазина, убрать со страницы модели, не интересующие покупателя. Это не слишком сложный в управлении инструмент, настройку которого освоит любой администратор.

Smart filter обладает рядом особенностей:

  • Анализирует весь товар раздела, выстраивает унифицированное представление на базе значений их свойств и цен;
  • Присутствует поддержка торговых предложений;
  • Показывает пользователю, что некоторые комбинации характеристик не значатся в каталоге.
  • Указывает число позиций, которые будут отображены при применении фильтра.
  • Начиная с версии 15.5.0 в Bitrix появилась возможность использовать человеко-понятные адреса для страниц умного фильтра.
  • Умный фильтр поддерживает автоматическую фильтрацию товара без перезагрузки страницы. Благодаря AJAX-технологии обновляется только та часть страницы, которая отвечает за товары каталога.

Умный фильтр удобен для покупателей интернет-магазина. Этот инструмент позволяет не просматривать весь каталог, отфильтровать сразу нужные товары по определенным характеристикам. Для
владельца интернет-магазина этот компонент также выгоден. Он улучшает юзабилити сайта и поведенческие факторы, одновременно способствуя увеличению конверсии и СЕО-продвижению.

Настройка Умного фильтра Битрикс

Работать с «умным» фильтром достаточно просто. Список основных настроек выглядит следующим образом:

  • Инфоблок, с которым и будет работать фильтр;
  • Шаблоны адресов страниц секции, фильтра, при использовании ЧПУ или уникальный код раздела;
  • Имя глобальных переменных с заданными правилами фильтрации элементов раздела.

Подключение Smart Filter Bitrix

Подключить умный фильтр к интернет-магазину можно несколькими способами:

  • Как часть компонента «Catalog 2.0»;
  • Через «Визуальный редактор»;
  • Вставка вызова компонента в исходный код.

В случае подключения Smart Filter в качестве составного компонента «Каталог 2.0» к стандартным настройкам фильтра прибавляется возможность выбор ориентации (горизонтальной или
вертикальной). Кроме того поскольку применяется компонент более высокого уровня, часть настроек для встроенных компонентов будет общей, что значительно упрощает управление.

Также существует возможность вставить умный фильтр через «Визуальный редактор». Для этого необходимо:

  • Изменить страницу через визуальный редактор;
  • Найти в списке компонентов «Контент», выбрать раздел «Каталог»;
  • В отображенном списке компонентов найти «Умный фильтр», после чего перетащить его на поле содержания страницы;
  • После этого можно перейти к настройке.

Особенности кастомизации

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

Более опытные разработчики могут пойти дальше в индивидуализации внешнего вида фильтра и задействовать каскадную таблицу стилей CSS.

Сегодня, когда каталоги интернет-магазинов могут содержать десятки тысяч товаров, наличие удобной для посетителей, быстрой и функциональной фильтрации товаров — не прихоть, а необходимость. Чем удобнее пользоваться вашим сайтом, тем больше у вас будет заказов и об этом стоит помнить уже на этапе планирования будущего сайта!

Источник

Битрикс таблица с фильтром

Вы уже знаете как выводить элементы и разделы. В документации 1С-Битрикс мы можем ясно видеть, что, не только приравнивание значений нам доступно но и:

  • «!» — не равно
  • «<» — меньше
  • «<=» — меньше либо равно
  • «>» — больше
  • «>=» — больше либо равно
  • «><» — между

На моей практике использовать «между» мне не доводилось 🙂 . А вот с остальным все гораздо проще, чем может показаться на первый взгляд. Вам важно уловить несколько очень важных вещей, которые сделают ваш код чуть лучше.

Используя arFilter вы избавите себя от лишних проверок

И это действительно так. Предположим, что у нас уже есть свойство которое устанавливает, есть ли товар в наличии, и вам необходимо написать условие:

Если количество товара больше 0 или свойство Наличие = Да, то показываем товар

Так вот, если не знать про сложную логику фильтра (о которой я расскажу чуть ниже), то мы бы писали через старые добрые «if, else«, причем уже после получения параметров — но, этого можно избежать еще на этапе выборки данных.

Если использовать в скриптах arFilter и arSelect — вы исключите лишние данные

На самом деле этот код:

наглядно показывает, что ничего лишнего мы не будем передавать (важно не только указывать условия в фильтре, но и только те поля которые вы будете использовать, arSelect, или в данном случае последний массив). Записывать «больше-меньше» нужно таким вот образом:

Читайте также:  Нужно ли удалять сажевый фильтр и глушить егр

Для остальных условий — аналогично, пишем перед свойством >, <, >=, <=, ! и вуаля 🙂 .

Как написать фильтр со сложной логикой 1С-Битрикс

Вот мы и подошли к самому интересному и не очевидному. Сложный фильтр может принимать 2 значения AND и OR (И и ИЛИ). При этом сложность условия, опять же, ограничивается лишь вашей фантазией 🙂 . Не будем ходить далеко, возьмем пример из документации:

Итак, для сложного фильтра, нам нужно создать массив, указать значение LOGIC в значение OR или AND, и после запятой создать 2 сравниваемых массива. Как видите, тут есть практически все условия о которых мы говорили выше (меньше, равно, больше или равно, не равно).

Битрикс $arFilter — как использовать подзапросы

Ситуация следующая — у нас есть каталог с оптовыми ценами, и есть товары с торговыми предложениями. Используем подзапросы при помощи CIBlockElement::SubQuery:

Первый «сложный» фильтр проверяет есть ли товар в наличии, а второй — выбирает только те товары, у которых оптовая цена (‘CATALOG_PRICE_3’) больше 0.

Надеюсь вам стало более понятно как работает $arFilter и что с ним можно делать, а если у вас остались вопросы не стесняйтесь задавать их в комментариях 🙂 .

ПС в статье идет речь НЕ ПРО УМНЫЙ ФИЛЬТР 🙂

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

— Создание сайтов на 1С-Битрикс любой сложности
— Вёрстка макетов Figma, Photoshop, Zeplin
— Поддержка проектов на Битриксе
— Разработка нового функционала для сайта
— Парсинг данных
— Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
— Интеграция по API со сторонними сервисами
и многое другое

15 комментария

Добрый день!
А как использовать умный фильтр — к всему инфоблоку.
Есть Каталог Аккумуляторы — вот при включение умного фильтра — он у меня появляется только когда зайду в какого нибудь производителя 🙁
Может подскажите — как его вывести что бы фильтрация производилась по всем производителям — и параметрам которые указаны (ток, кллемы и т.д)

Добрый день, Андрей. В данной статье было не совсем про умный фильтр, но, если я вас правильно понял, вам нужно зайти в инфоблок, свойства, и в настройках свойства поставить галочку «показывать в умном фильтре». У меня умный фильтр, который работает в каталоге, на странице раздела показывает доступные варианты фильтрации, проверьте, помогло ли.

Добрый день!
А не подскажете, как реализовать показ в умном фильтре только товаров в наличии? То есть добавить в него флажок «Только в наличии». Переменная CATALOG_QUANTITY в которой указано количество товара. Как запихнуть это дело в сам фильтр? Или есть более продуманное решение? За ранее спасибо за ответ!

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

Ну на других сайтах (с битриксом) это же как то реализовано в умном фильтре… У меня есть такое условие в карточке товара:
» 0 ) <a href="#" data-item="» data-quantity=»1″ sm to-cart» alt=»» rel=»nofollow»> Купить

<a href="#" sm order" alt="» rel=»nofollow»> Под заказ
»
Что оно делает и так видно, но сколько я не пытался эту переменную подставить в фильтр, ничего не выходит… либо я не туда вставляю, либо он не хочет понимать эту переменную… Уже весь мозг себе сломал, чтоб реализовать такую возможность. Вот и обратился за помощью, авось кто-нибудь сталкивался и подскажет.

эх, код обрезался… Переменная выглядит так:
if( intval($arItem[‘CATALOG_QUANTITY’]) > 0 )< то кнопка купить else под заказ

ответил вам на почту 🙂

Реально ли с помощью $arFilter извлечь элементы, у которых есть множественное свойства типа файл. и в поле описания файла (description) упоминается слово, например «население»?
Я думал что нибудь типа $arFilter = Array(‘IBLOCK_ID’=>$IBLOCK_ID, ‘PROPERTY’=>Array(‘SRC’=>’%населени%’));

Честно говоря не пробовал, так бы вам подсказал. Но если это не получилось в самом фильтре, я бы рекомендовал делать проверки уже после. Но т.к. это может занять много времени в некоторых случаях, то можно написать скрипт который бы записывал отдельное свойство, например, тип «список» и называется «население», а запускался по cron. Таким образом вы еще на уровне фильтрации сможете сделать выборку, ну это конечно крайний вариант 🙂

Здравствуйте! Подскажите пожалуйста как применить фильтр по клику на ссылку. Хочу сделать так чтоб при клике в catalog.section на элемент выводились похожие по параметрам элементы.

Здравствуйте. Вам лучше использовать комплексный компонент каталог, там сразу по клику на раздел будет фильтрация по разделам. А если вы хотите написать свой фильтр, то получается что по клику на раздел нужно передавать айди секции. Если рассматривать пример через GET переменные, то ссылки будут в виде ‘/catalog/section/?section_id=5’ — и потом вам нужно передавать в фильтр уже айди секции, то есть — ‘SECTION_ID’ => $_GET[‘section_id’] — но как по мне это ужасный вариант, и я бы все таки рекомендовал кастомизировать стандартный комплексный компонент каталога =)

Читайте также:  Серия продуктов от Эстель для защиты от солнца

Здравствуйте. В подзапросе ‘IBLOCK_ID’ => 33 – это ID инфоблока с торговыми предложениями?

Здравствуйте, всё верно

Спасибо. Помогите, пожалуйста, сформировать фильтр корректно. Затупил нещадно.
Вот код:
$arSubQuery = Array(‘IBLOCK_ID’ => 3, ‘>PROPERTY_UF_QUANTITY’ => 0);
$arFilter = $arFilter2 = array(
«IBLOCK_ID» => «2»,
«ACTIVE» => «Y»,
array(
«LOGIC» => «AND»,
array(‘ID’ => CIBlockElement::SubQuery(‘PROPERTY_CML2_LINK’, $arSubQuery)),
),
);

«IBLOCK_ID» => «2» — инфоблок с товарами, «IBLOCK_ID» => «3» — инфоблок с товарными предложениями, UF_QUANTITY — свойство количество в товарном предложении. Пытаюсь отфильтровать товары с наличием и что-то не выходит никак.

Источник



Bitrix фильтрация и сортировка элементов по свойству на примере списка статей.

Фильтрация элементов инфоблока по свойству в компонентах Bitrix

Предположим у нас есть список статей. Статья имеет свойство «Рубрика» (тип свойства — справочник) в котором соответственно выбирается название рубрики к которой относится статья.

Список статей на сайте выводится при помощи комплексного компонента Новости (bitrix:news).

Структура файлов компонента bitrix:news следующая:

Так как фильтрация и сортировка элементов происходит в списках элементов, то нам нужно внести изменения в работу компонентов bitrix:news.list, который отвечает за вывод списка записей.

Список элементов выводятся на странице Общего списка новостейnews.php и на странице Раздела списка новостейsection.php.

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

Чтобы подготовить нужный набор данных создадим в папке шаблона компонента файл result_modifier.php со следующим содержанием:

Данные готовы. Теперь сделаем шаблон вывода фильтрации. Открываем для редактирования файл news.php. Перед 55 строкой ( перед вызовом компонента news:list ) добавим следующий код:

Кроме того обязательно перед вызовом компонента news.list так же добавим параметры для фильтрации ( именно этот код определяет работу фильтрации, передаёт параметры фильтра в компонент news.list )

Добавим стили для созданных элементов, для этого создадим в папке с шаблоном компонента файл style.css или если файл уже существует то добавим в него в конце следующие стили:

Получим вот такой стилизованный список рубрик для фильтрации:

Таким образом мы добавили функционал для фильтрации элементов по свойству типа справочник.

Источник

Как использовать arFilter, в Битрикс API

Вы уже знаете как выводить элементы и разделы. В документации 1С-Битрикс мы можем ясно видеть, что, не только приравнивание значений нам доступно но и:

  • «!» — не равно
  • «<» — меньше
  • «<=» — меньше либо равно
  • «>» — больше
  • «>=» — больше либо равно
  • «><» — между

На моей практике использовать «между» мне не доводилось 🙂 . А вот с остальным все гораздо проще, чем может показаться на первый взгляд. Вам важно уловить несколько очень важных вещей, которые сделают ваш код чуть лучше.

Используя arFilter вы избавите себя от лишних проверок

И это действительно так. Предположим, что у нас уже есть свойство которое устанавливает, есть ли товар в наличии, и вам необходимо написать условие:

Если количество товара больше 0 или свойство Наличие = Да, то показываем товар

Так вот, если не знать про сложную логику фильтра (о которой я расскажу чуть ниже), то мы бы писали через старые добрые «if, else«, причем уже после получения параметров — но, этого можно избежать еще на этапе выборки данных.

Если использовать в скриптах arFilter и arSelect — вы исключите лишние данные

На самом деле этот код:

наглядно показывает, что ничего лишнего мы не будем передавать (важно не только указывать условия в фильтре, но и только те поля которые вы будете использовать, arSelect, или в данном случае последний массив). Записывать «больше-меньше» нужно таким вот образом:

Для остальных условий — аналогично, пишем перед свойством >, <, >=, <=, ! и вуаля 🙂 .

Как написать фильтр со сложной логикой 1С-Битрикс

Вот мы и подошли к самому интересному и не очевидному. Сложный фильтр может принимать 2 значения AND и OR (И и ИЛИ). При этом сложность условия, опять же, ограничивается лишь вашей фантазией 🙂 . Не будем ходить далеко, возьмем пример из документации:

Итак, для сложного фильтра, нам нужно создать массив, указать значение LOGIC в значение OR или AND, и после запятой создать 2 сравниваемых массива. Как видите, тут есть практически все условия о которых мы говорили выше (меньше, равно, больше или равно, не равно).

Битрикс $arFilter — как использовать подзапросы

Ситуация следующая — у нас есть каталог с оптовыми ценами, и есть товары с торговыми предложениями. Используем подзапросы при помощи CIBlockElement::SubQuery:

Читайте также:  Фильтры салона для Volkswagen в Санкт Петербурге

Первый «сложный» фильтр проверяет есть ли товар в наличии, а второй — выбирает только те товары, у которых оптовая цена (‘CATALOG_PRICE_3’) больше 0.

Надеюсь вам стало более понятно как работает $arFilter и что с ним можно делать, а если у вас остались вопросы не стесняйтесь задавать их в комментариях 🙂 .

ПС в статье идет речь НЕ ПРО УМНЫЙ ФИЛЬТР 🙂

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

— Создание сайтов на 1С-Битрикс любой сложности
— Вёрстка макетов Figma, Photoshop, Zeplin
— Поддержка проектов на Битриксе
— Разработка нового функционала для сайта
— Парсинг данных
— Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
— Интеграция по API со сторонними сервисами
и многое другое

15 комментария

Добрый день!
А как использовать умный фильтр — к всему инфоблоку.
Есть Каталог Аккумуляторы — вот при включение умного фильтра — он у меня появляется только когда зайду в какого нибудь производителя 🙁
Может подскажите — как его вывести что бы фильтрация производилась по всем производителям — и параметрам которые указаны (ток, кллемы и т.д)

Добрый день, Андрей. В данной статье было не совсем про умный фильтр, но, если я вас правильно понял, вам нужно зайти в инфоблок, свойства, и в настройках свойства поставить галочку «показывать в умном фильтре». У меня умный фильтр, который работает в каталоге, на странице раздела показывает доступные варианты фильтрации, проверьте, помогло ли.

Добрый день!
А не подскажете, как реализовать показ в умном фильтре только товаров в наличии? То есть добавить в него флажок «Только в наличии». Переменная CATALOG_QUANTITY в которой указано количество товара. Как запихнуть это дело в сам фильтр? Или есть более продуманное решение? За ранее спасибо за ответ!

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

Ну на других сайтах (с битриксом) это же как то реализовано в умном фильтре… У меня есть такое условие в карточке товара:
» 0 ) <a href="#" data-item="» data-quantity=»1″ sm to-cart» alt=»» rel=»nofollow»> Купить

<a href="#" sm order" alt="» rel=»nofollow»> Под заказ
»
Что оно делает и так видно, но сколько я не пытался эту переменную подставить в фильтр, ничего не выходит… либо я не туда вставляю, либо он не хочет понимать эту переменную… Уже весь мозг себе сломал, чтоб реализовать такую возможность. Вот и обратился за помощью, авось кто-нибудь сталкивался и подскажет.

эх, код обрезался… Переменная выглядит так:
if( intval($arItem[‘CATALOG_QUANTITY’]) > 0 )< то кнопка купить else под заказ

ответил вам на почту 🙂

Реально ли с помощью $arFilter извлечь элементы, у которых есть множественное свойства типа файл. и в поле описания файла (description) упоминается слово, например «население»?
Я думал что нибудь типа $arFilter = Array(‘IBLOCK_ID’=>$IBLOCK_ID, ‘PROPERTY’=>Array(‘SRC’=>’%населени%’));

Честно говоря не пробовал, так бы вам подсказал. Но если это не получилось в самом фильтре, я бы рекомендовал делать проверки уже после. Но т.к. это может занять много времени в некоторых случаях, то можно написать скрипт который бы записывал отдельное свойство, например, тип «список» и называется «население», а запускался по cron. Таким образом вы еще на уровне фильтрации сможете сделать выборку, ну это конечно крайний вариант 🙂

Здравствуйте! Подскажите пожалуйста как применить фильтр по клику на ссылку. Хочу сделать так чтоб при клике в catalog.section на элемент выводились похожие по параметрам элементы.

Здравствуйте. Вам лучше использовать комплексный компонент каталог, там сразу по клику на раздел будет фильтрация по разделам. А если вы хотите написать свой фильтр, то получается что по клику на раздел нужно передавать айди секции. Если рассматривать пример через GET переменные, то ссылки будут в виде ‘/catalog/section/?section_id=5’ — и потом вам нужно передавать в фильтр уже айди секции, то есть — ‘SECTION_ID’ => $_GET[‘section_id’] — но как по мне это ужасный вариант, и я бы все таки рекомендовал кастомизировать стандартный комплексный компонент каталога =)

Здравствуйте. В подзапросе ‘IBLOCK_ID’ => 33 – это ID инфоблока с торговыми предложениями?

Здравствуйте, всё верно

Спасибо. Помогите, пожалуйста, сформировать фильтр корректно. Затупил нещадно.
Вот код:
$arSubQuery = Array(‘IBLOCK_ID’ => 3, ‘>PROPERTY_UF_QUANTITY’ => 0);
$arFilter = $arFilter2 = array(
«IBLOCK_ID» => «2»,
«ACTIVE» => «Y»,
array(
«LOGIC» => «AND»,
array(‘ID’ => CIBlockElement::SubQuery(‘PROPERTY_CML2_LINK’, $arSubQuery)),
),
);

«IBLOCK_ID» => «2» — инфоблок с товарами, «IBLOCK_ID» => «3» — инфоблок с товарными предложениями, UF_QUANTITY — свойство количество в товарном предложении. Пытаюсь отфильтровать товары с наличием и что-то не выходит никак.

Источник