Фильтр по свойству типа список битрикс

Фильтр по свойству типа список битрикс

Заметки программиста, мысли и полезные ссылки

Часто бывает нужно отфильтровать товары в каталоге битрикса и часто это вызывает сложности.

Вот несколько примеров фильтров которые часто вызывают затруднения у новичков и не сразу находятся в поиске.
1) фильтр по свойству типа список (чекбокс)

2) сложный фильтр по диапазону цен с разными типами цен
Пример, у товаров есть 2 цены — базовая и цена со скидкой, надо выбрать все товары по цене от 1000 до 2000 с учетом обеих цен

В CATALOG_PRICE_1 и CATALOG_PRICE_2 укажите ваши ID цен по которым будете фильтровать.

3) фильтр по имени — выберет все начинающиеся на «A», можно указать полное имя элемента

4) фильтр по символьному коду свойства

5) фильтр по значению свойства

6) фильтр элементов у которых свойство MYPROP активно

7) выбирает элементы с самой актуальной датой

Вот небольшой минимум, все эти фильтры можно комбинировать и менять, чтобы получить более сложные фильтры по нескольким свойствам.
Если у вас есть какие-то интересные фильтры или вопросы пишите их в комментарии.

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

1. У нас есть инфоблок, в корне которого лежат основные разделы

2. Фильтрация должна происходить по ссылкам с главной страницы

И так, у нас есть сразу 2 проблемы:

1. В битриксе нельзя вывести все товары из инфоблока, не указав определенный раздел инфоблока (как бы можно, но в настройках штатного компонента этого нет)
2. Как сделать ссылку на фильтр, если в запросе на фильтрацию подставляются какие-то левые значения (arrFilter_55_4161729085=Y&set_filter=Показать)?

Для более полного понимая способа решения данной задачи проделаю все шаги с самого начала на демо-сайте битрикса (https://bitrixlabs.ru/#create-demo).

Первым делом нужно создать отдельную страницу, на которой будет выводиться наш каталог с умным фильтром:


Специально выбрал фильтр по цвету, потому что цвет есть у нас во всех разделах сайта, как раз то, что нам нужно.

При переходе на созданную страницу мы видим список всех разделов инфоблока (а нам нужен список всех товаров из всех разделов данного инфоблока).

Копируем стандартный шаблон компонента «каталог», чтобы не портить стандартный + чтобы избежать возможных перезаписей шаблона после обновлений:

Теперь переходим к редактированию самого шаблона, а именно нам нужен файл «sections.php», удаляем в нем весь код и заменяем его на:

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

Смотрим что получилось:

Переходим к редактированию параметров компонента и выбираем нужный инфоблок:

Смотрим что получилось и ловим фиаско:

Переходим в редактирование параметров компонента и включаем умный фильтр (попутно выбираем нужные свойства для фильтрации и отключаем сайдбар и вывод дерева каталога):

Переходим к редактированию файла «section_vertical.php», ищем вызов компонента «bitrix::catalog.section» и добавляем ему к параметрам:

А вот пояснение к параметру из официальной документации:

Теперь переходим на нашу страницу с товарами и видим уже примерно следующее:

Читайте также:  В чем разница между ростест и евротест


Список товаров выводится из всех разделов + фильтр на месте

Чуть не забыл, у фильтра в параметрах нужно отключить SEF_MODE (чпу), иначе работать наш фильтр не будет.

Остается теперь только понять алгоритм генерации ссылок для фильтра, как нам с главной страницы перейти по ссылке и чтобы фильтр автоматом подхватил ее и отфильтровал данные.

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

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


Все прекрасно работает

Остается понять алгоритм генерации данного параметра в запросе:

33 — это у нас ID свойства с цветом

А вот откуда тут берется 744714710 — не понято. Сначала я думал, что это может быть айдишкой самого значения свойства, но тут циферки для ID большие слишком + я все таки решил убедиться и проверил все это дело примерно таким способом:

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

Собственно тут видно, что ключ фильтрации у нас генерируется за счет метода «fillItemValues»:

Находим его в файле «class.php» с исходниками компонента умного фильтра (кто бы сомневался, хотя… битрикс же):

На 642 строке данного файла находим код, который и генерирует ключ фильтра:

Получается, что тут просто высчитывается сумма из некого «htmlKey» и берется значение суммы по модулю

Находим происхождение «htmlKey» на строке 518:

Смотрим из чего у нас выходит «key»:

И видим, что при обычных раскладах это просто значение свойства.

Получается, что значение свойства хешируют и берут его значение по модулю + перед хеш суммой добавляется ID свойства.

Возвращаемся к моей изначальной задаче и делаем следующее:

Перебираем все значения нужного нам свойства и записываем все это дело в ассоциативный массив.
А уже при выводе списка производителей просто ищем значение по уже готовому массиву:

Вауля и наш костыль готов к работе =)

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

Но думаю, что если покопаться, то можно разобраться и с этим. В любом случае, данное решение лучше, чем просто выборка всех элементов через «GetList» и создание своего кастомного фильтра с нуля.

Надеюсь, что данная статья хоть кому-то облегчит жизнь и сэкономит пару часов,.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

При создании достаточно сложных интернет-магазинов на Битрикс, иногда встает задача помимо обычной навигации по каталогу создать дополнительный раздел с сортировкой товаров по производителям. При этом производители вынесены в отдельный инфоблок, а в инфоблоке каталога создано свойство "Производитель" типа "Привязка к разделам". Расскажу как отсортировать товары по этому свойству.

Создаем основной функционал:

Для начала идем в админпанель и создаем новый тип инфоблоков "Справочники", в нем создаем инфоблок "Производители".

В инфоблоке каталога создаем свойство "Производители" типа "Привязка к разделам" и указываем в качестве связанного инфоблока, инфоблок созданный выше. Заодно запоминаем присвоенный нашему свойству ID (у меня на скриншоте 65) — он нам еще понадобится.

Переходим в публичную часть сайта и создаем новый раздел, в котором выводим компонент "Топ элементов каталога" и настраиваем его на инфоблок нашего каталога. Переходим в режим кода и размещаем над компонентом вот такой код:

Читайте также:  Прекращена работа catalyst control center host application

В самом компоненте подключаем фильтр.

После этого создаем еще один раздел, в который выводим комплексный компонент "Каталог" и в файле section.php вместо вывода списка элементов раздела вставляем наш топ товаров вместе с созданным фильтром.

Для того, чтобы не создавались дубликаты страниц подробного описания товаров, настраиваем ЧПУ топа товаров на раздел с основным каталогом. Комплексный компонент каталог нам нужен для вывода описаний производителей и передачи на страницу ID своего раздела, по которому мы и отфильтровываем товары.

Пример работы этого решения:

Сайт еще в разработке, потому на оформление и явные косяки не обращайте внимания 🙂

http://intim-avenue.ru/catalog/624.html — подробная карточка товара, которая привязана к производителю. Если кликнем на название производителя попадем

http://intim-avenue.ru/manufs/ — сюда, это раздел производителя со всеми его товарами изо всех категорий каталога.

При этом, если кликнем на конкретный товар находясь в производителе, снова попадем в /catalog/ ID-товара. То есть дубликатов подробных карточек нет. (кстати не забудьте в инфоблоке производителей затереть все пути ЧПУ- иначе они попадут в карту сайта и получатся дубликаты.)

Цитата
Владимир пишет:
Подскажите, где об этом можно почитать в официальной документации Битрикс? Хочется понять, что еще можно с этим сделать, где и как использовать. Просто для саморазвития

здравствуйте! Подскажите можно ли сделать свойство инфоблока список множественное у которого будут категории.? Например свойство " усуги" — категория "ногти" — значение "маникюр". В дальнейшем использовать его для сортировки с помощью фильтра. Чтобы в фильтре это выглядело примерно так:

Ногти
Маникюр
Педикюр
Наращивание ногтей

Волосы
Стрижка
Окрашивание
Ламинирование волос

Цитата
Павел пишет:
здравствуйте! Подскажите можно ли сделать свойство инфоблока список множественное у которого будут категории.? Например свойство " усуги" — категория "ногти" — значение "маникюр". В дальнейшем использовать его для сортировки с помощью фильтра. Чтобы в фильтре это выглядело примерно так:

Ногти
Маникюр
Педикюр
Наращивание ногтей

Волосы
Стрижка
Окрашивание
Ламинирование волос

Цитата
Олеся пишет:
Добрый день!
У меня есть тип инфоблока Каталог, в нем два инфоблока — правый каталог и левый каталог, они разные, но в верхнем меню есть страница каталог и я хочу чтобы весь товар выходил там! подскажите пожалуйста как это реализовать на битрикс.
Попробовала этим уроком — не получилось. Вставляет только какой то один инфоблок.
Спасибо!

Добрый день, у меня возникли вопросы:

1. Какие URL нужно прописывать в инфоблоке "Производители" #SECTION_CODE#/ или #SECTION_ID#/
значит идет:
а. /manufs/
b. #SECTION_CODE#/ или ID
c. #SECTION_CODE#/ и .

2. "Переходим в публичную часть сайта и создаем новый раздел, в котором выводим компанент "Топ элементов каталога" и настраиваем его на инфоблок нашего каталога. Переходим в режим кода и размещаем над компанентом вот такой код. "

а. где именно создавать этот раздел /catalog/ или где то в др. месте. в корне сайта?

3. "После этого создаем еще один раздел в который выводим комплексный компанент "Каталог" и в файле section.php вместо вывода списка элементов раздела вставляем наш топ товаров. "

а. где именно создавать этот раздел? внутри раздела созданного выше?
b. где найти файл section.php?

Заранее простите за столько вопросов, я новичек в этом деле.

Цитата
Александр пишет:
свойство производитель со списком значений выгрузилось из 1с. меняем тип список на привязку к разделам и выбираем новый инфоблок Производители. сохраняем. но в справочнике Производители не появились элементы из списка значений. при повторной выгрузке из 1с (полная) создается еще одно свойство производитель опять тип список. элементы не появились? что делать подскажите.
Читайте также:  Named entity expected got none

Цитата
http://intim-avenue.ru/manufs/ — сюда, это раздел производителя со всеми его товарами изо всех категорий каталога.
http://intim-avenue.ru/manufs/150/ — все производители
Цитата
http://intim-avenue.ru/manufs/150/ — сюда, это раздел производителя со всеми его товарами изо всех категорий каталога.
http://intim-avenue.ru/manufs/ — все производители

Цитата
Юлиана написал:
Добрый день, Михаил,
А что означает фраза "..и в файле section.php вместо вывода списка элементов раздела вставляем наш топ товаров вместе с созданным фильтром."?
Можете пояснить, куда именно вставлять "наш топ товаров вместе с созданным фильтром.".
Спасибо заранее!

Цитата
Михаил Базаров пишет:
Цитата
Юлиана написал:
Добрый день, Михаил,
А что означает фраза "..и в файле section.php вместо вывода списка элементов раздела вставляем наш топ товаров вместе с созданным фильтром."?
Можете пояснить, куда именно вставлять "наш топ товаров вместе с созданным фильтром.".
Спасибо заранее!

В файл section.php шаблона каталога

Цитата
Алексей пишет:
Добрый день, у меня возникли вопросы:

1. Какие URL нужно прописывать в инфоблоке "Производители" #SECTION_CODE#/ или #SECTION_ID#/
значит идет:
а. /manufs/
b. #SECTION_CODE#/ или ID
c. #SECTION_CODE#/ и .

2. "Переходим в публичную часть сайта и создаем новый раздел, в котором выводим компанент "Топ элементов каталога" и настраиваем его на инфоблок нашего каталога. Переходим в режим кода и размещаем над компанентом вот такой код. "

а. где именно создавать этот раздел /catalog/ или где то в др. месте. в корне сайта?

3. "После этого создаем еще один раздел в который выводим комплексный компанент "Каталог" и в файле section.php вместо вывода списка элементов раздела вставляем наш топ товаров. "

а. где именно создавать этот раздел? внутри раздела созданного выше?
b. где найти файл section.php?

Заранее простите за столько вопросов, я новичек в этом деле.

Спасибо, Алексей

Цитата
Владислав Кузнецов написал:
Плохо что нельзя отредактировать предыдущее сообщение, пока него не дано ответа.
У меня еще не получается вывести так: Раздел 1 — Раздел 2 — Раздел 3
Если у меня элементы привязаны к разделу 3, не могу их вывести в разделе 2 и соответственно в разделе 1.
Можно привязывать по структуре через множественный выбор, но в 1С не имеется возможности в доп.свойстве выбрать несколько значений.
P.S.: Возможно Вы знаете другой вариант или как можно такое реализовать. Был бы Вам при много благодарен за такого рода помощь.

Да, 1С не имеет штатно. но мне несколько раз делали это, на стороне 1С. Просто программист 1С, затрачивал день времени и реализовывал множественную привязку (да и много чего еще- не стандартного)

Как вариант, если под рукой нет грамотного программиста, можете расковырять и переписать компонент catalog.1с.export / import — именно они отвечают за обработку и загрузку файла.

Но очень не советую, лишитесь обновлений этого модуля (само собой, выносите его в свое пространство имен). А обновлений там бывает много- полезных, придется вручную их отслеживать.

PS Как правило, 1С все переписывают (не только в плане обмена с сайтом), так и так отрезают обновления- так, что лучше решать вопрос на ее стороне.

Магазин, на базе готового решения от 35 900 рублей / от 3 до 5 дней

© 2011—2020 Разработка сайтов: ИП Базаров, ОГРНИП: 315784700173692.
Работает на 1С-Битрикс: Бизнес.
Сайт может содержать материалы 18+

Ссылка на основную публикацию
Установка виндовс зависла на начало установки
Если вы решили переустановить или установить операционную систему, но начало установки Windows 7 зависает, то в этой статье, думаю, вы...
Тс 6 силы в механике
Тест по физике Силы в механике для 10 класса с ответами. Тест включает в себя 2 варианта. В каждом варианте...
Тульские двери металлические отзывы
Рады представить вам новинку с двумя МДФ панелями- Тульскую дверь Б25 НОВИНКИ 2019 Тульская дверь Е4 ОРХИДЕЯ НОВИНКИ 2019 Тульская...
Установка драйвера принтера отказ
Нередки ситуации, когда не устанавливается принтер, хотя система видит, что к компьютеру подсоединилось новое оборудование. Решение такой задачи требует серьезного...
Adblock detector