Отфильтровать элементы в Битрикс по свойству привязка к разделам

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

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

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

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

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

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

GLOBAL $arrFilter; 
    $arrFilter = array( 
    'PROPERTY_65' => $arResult["VARIABLES"]["SECTION_ID"], 
    ); 

Расшифровка:

<? 
    Включаем фильтр $arrFilter; 
    $arrFilter = array( 
    'Наше свойство с ID 65' => получаем ID текущего раздела, 
    ); 
 ?> 

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

 "FILTER_NAME" => "arrFilter",

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

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

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

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

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

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

 GLOBAL $arrFilter; 
    $arrFilter = array( 
    'PROPERTY_65' => $arResult["VARIABLES"]["SECTION_ID"], 
    ); 

В самом компоненте передаем параметр фильтрации с использованием этого фильтра.

 "FILTER_NAME" => "arrFilter",

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

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

Михаил Базаров 11.05.2016
Цитата
Юлиана написал:
Добрый день, Михаил,
А что означает фраза "..и в файле section.php вместо вывода списка элементов раздела вставляем наш топ товаров вместе с созданным фильтром."?
Можете пояснить, куда именно вставлять "наш топ товаров вместе с созданным фильтром.".
Спасибо заранее!
В файл section.php шаблона каталога
Юлиана 11.05.2016
Спасибо за подробный и развернутый ответ!
Цитата
Михаил Базаров пишет:
Цитата
Юлиана написал:
Добрый день, Михаил,
А что означает фраза "..и в файле section.php вместо вывода списка элементов раздела вставляем наш топ товаров вместе с созданным фильтром."?
Можете пояснить, куда именно вставлять "наш топ товаров вместе с созданным фильтром.".
Спасибо заранее!
В файл section.php шаблона каталога
Александр Христич 30.06.2016
Здравствуйте Михаил!
Возник такой вопрос:
Делал все как вы и написали:
1. Создал инфоблок с ,в моем случае, "Дизайнерами", при этом заранее очистил все поля ЧПУ адресами
Картинка
2.В новом разделе вывел компонент "Каталог", и в файле section.php заменил вывод списка элементов на топ товаров
Картинка
Картинка
3.Настроил адреса до детальной страницы(перенаправил её на главную страницу вывода каталога товаров), страницы разделов(оставил её как адрес до раздела где мы выводим топ элементов)
Картинка
Но в результате ничего не вышло, т.к. ссылка ведет на ту же страницу элемента.
Картинка
Помогите пожалуйста!
bugmer 12.12.2016
Цитата
Алексей пишет:
Добрый день, у меня возникли вопросы:

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

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

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

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

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

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

Спасибо, Алексей
Не могли бы вы ответить на данные вопросы.
С Битриксом только начал разбираться, и поэтому не совсем понятно.
Владислав Кузнецов 20.11.2017
Добрый день.
Ваши статьи очень помогают разобраться в Битриксом человеку с небольшим опытом. За это Вам огромнейшее спасибо.
Есть не большая просьба. У меня так и не получается сделать вывод в каталог с необходимой структурой из выгруженного каталога с 1С с привязанным свойством к необходимому разделу. Может данный способ не подходит для этого, но насколько я понимаю то должен работать. Не могли бы Вы записать видео, так как возможно я упускаю какую либо мелочь, хоть и по своему мнения делаю все верно. Думаю данный материал в виде видео был бы многим очень полезен.
Владислав Кузнецов 20.11.2017
P.S.: У меня получилось вывести используя ID, но хотелось бы реализовать на CODE и используя ЦПУ.
Владислав Кузнецов 20.11.2017
Плохо что нельзя отредактировать предыдущее сообщение, пока него не дано ответа.
У меня еще не получается вывести так: Раздел 1 - Раздел 2 - Раздел 3
Если у меня элементы привязаны к разделу 3, не могу их вывести в разделе 2 и соответственно в разделе 1.
Можно привязывать по структуре через множественный выбор, но в 1С не имеется возможности в доп.свойстве выбрать несколько значений.
P.S.: Возможно Вы знаете другой вариант или как можно такое реализовать. Был бы Вам при много благодарен за такого рода помощь.
Михаил Базаров 20.11.2017
Цитата
Владислав Кузнецов написал:
Плохо что нельзя отредактировать предыдущее сообщение, пока него не дано ответа.
У меня еще не получается вывести так: Раздел 1 - Раздел 2 - Раздел 3
Если у меня элементы привязаны к разделу 3, не могу их вывести в разделе 2 и соответственно в разделе 1.
Можно привязывать по структуре через множественный выбор, но в 1С не имеется возможности в доп.свойстве выбрать несколько значений.
P.S.: Возможно Вы знаете другой вариант или как можно такое реализовать. Был бы Вам при много благодарен за такого рода помощь.
Да, 1С не имеет штатно. но мне несколько раз делали это, на стороне 1С. Просто программист 1С, затрачивал день времени и реализовывал множественную привязку (да и много чего еще- не стандартного)

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

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

PS Как правило, 1С все переписывают (не только в плане обмена с сайтом), так и так отрезают обновления- так, что лучше решать вопрос на ее стороне.
Владимир 23.06.2023
Доброго. А почему статья начинается со слова отсортировать?
Михаил Базаров 23.06.2023
Цитата
Владимир написал:
Доброго. А почему статья начинается со слова отсортировать?

Добрый. Согласен, не удачное название- поправил.

Блог-note: заметки разработчика

Ссылки для добавления и удаления товара из сравнения в Битрикс

Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, если уже добавлен. Чуть позже до...

Фотогалерея на шаблоне новостей в 1С-Битрикс

Частенько стоит задача, по мимо стандартных "Картинка для анонса" и "Детальная картинка", добавить в...

Фотогалерея на базе компонента новостей, с fancybox.

Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогалереи на базе встроеннного в би...

Вывести множественное свойство типа файл с названием и весом файла в Битрикс

В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1С-Битрикс. С показом оригиналь...

Получить и вывести данные из профиля покупателя в кабинете пользователя 1С-Битрикс

Задача: вывести пользователю информацию по всем, его, профилям покупателя в компоненте sale.personal.profile.list без пе...

Увидеть файл заказов который передаст Битрикс в 1С

Для диагностики обмена заказов, интернет-магазина на 1С Битрикс с 1С Управление Торговлей, нужно увидеть xml файл с зака...

Создание блога с комментариями, оценками и просмотрами на сайте с 1С-Битрикс

Если на вашем сайте требуется создание раздела с блогом или новостями, статьями. Записям в которых, посетители смогу ста...

Выбор основного раздела для элемента инфоблока в 1С-Битрикс

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

Удалить всех пользователей которые не делали заказов в магазине 1С-Битрикс

Задача: сайт проработал 7 лет и все время на нем была открытая регистрация, создано много мертвых учетных записей (б...