поле привязка к разделам
Технические данные
Описание
Что делать, когда через «пользовательское поле» нужна привязка к разделам инфоблока?
Если каталог содержит от 1000 разделов и более, то страница нереально долго грузится, тем самым затрудняет процесс работы. Для этого мы разработали специальный модуль, который автозаполняет поле по введенному словосочетанию, и теперь не нужно пролистывать весь селектор в поиске нужного раздела. Достаточно ввести его название и он отобразится в поле.
Для объектов CRM будет работать?
1.0.4 (15.07.2021) | Исправленна ошибка после обновления ядра |
1.0.3 (17.12.2019) | Мелкие правки |
1.0.2 (16.12.2019) | мелкие правки |
1.0.1 (16.12.2019) | добавлены шаблоны для компонентов system.field.edit и system.field.view |
Заявки в техническую поддержку принимаются на сайте https://dwstroy.ru/support/, предварительно нужна регистрация. Обращение можно направить по электронной почте support@dwstroy.ru.
Обрабатываются обращения c 10:00 до 18:00 (по МСК), время реагирования 24 часа.
Тип свойства «Привязка к разделам»
Собственно вопрос в теме «Можно ли как-то привязать элемент к разделам своего инфоблока?». По умолчанию установлена привязка к разделам другого инфоблока, а к своему можно как-то??
Цитата |
---|
Юрий Шубин пишет: Дмитрий Яковенко, дело в том, что логичней было бы привязать элемент именно к разделам своего инфоблока в моем случае. Неудобно разносить смежные элементы по разным инфоблокам… |
Задача может быть такой: есть каталог товаров. Один товар может принадлежать нескольким разделам. Например, «Шахматы» могут принадлежать разделам «Изделия из дерева» и «Игры». Необходимо сделать так, чтобы УРЛ элемента был один, причем определенный. Т.е. /game/chess/ или /wood/chess/. Битрикс, как я понял, выдает раздел с наименьшим ID, а мне нужен однозначно определенный раздел.
Вопрос остается открытым.
Задача ясна: вы можете привязать элемент к нескольким разделам, но вам хотелось бы закрепить элемент за одним главным разделом потому что из его кода строится URL до элемента. И этот главный раздел не всегда с меньшим ID (т.е. не всегда попадает в IBLOCK_SECTION_ID элемента.)
Можно попробовать свой пользовательский тип свойства привязки к разделам создать, в котором разрешить привязку к разделам родного инфоблока. Только в этом случае все равно же, привязанные таким образом элементы не будут в списке элементов данных разделов выводиться.
Может попробовать по событию при сохранении элемента IBLOCK_SECTION_ID перезаписывать. Значение для него как раз брать из свойства пользовательского типа привязки к родным разделам. Т.е. в этом свойстве вы будите как раз выставлять основной раздел. Как БУС поведет себя при этом не знаю.
Вывести дополнительное пользовательское поле, использование полей в фильтрах
Если вам нужно вывести дополнительное пользовательское поле типа «Привязка к разделам инфоблока», данная записка возможно поможет. Опыт использования достаточно узкий, мало где может понадобиться, но. просто оставлю это здесь
Также, в рамках заметки, можно увидеть как вывести название родительского раздела инфоблока, зная ID одного из его потомков (подраздела).
Итак: Предположим, что у нас есть инфоблок с разделами, у которые есть подразделы:
И есть дополнительное пользовательское поле, типа «Привязка к разделам инф. блоков» направленное на этот инфоблок
В профиле пользователя, он может выбрать любой подраздел, любого раздела и самое главное не один. То есть свойство множественное.
И предположим, что пользователь навыбирал какие-то разделы. Нам же нужно вывести выбранные им разделы (названия) где-то на сайте, вообще не важно где
Для начала научимся выводить дополнительные поля пользователя в принципе, любого типа. По сути все просто:
$IBLOCK_ID = 10; // ID нужного инфоблока
//Создаем массив выводимых полей
$arSelect = array(‘ID’, ‘NAME’);
А теперь самое сложное, нам нужно- зная ID тех разделов которые выбрал пользователь, добавить в фильтрацию к методу CIBlockSection::GetTreeList и результатом получим все разделы которые выбрал пользователь
И добавляем фильтр к CIBlockSection::GetTreeList
$IBLOCK_ID = 10; // ID нужного инфоблока
//Создаем массив выводимых полей
$arSelect = array(‘ID’, ‘NAME’);
Все, теперь вы можете выводить названия и ID (ID конечно можно убрать из вывода, если ни к чему их показывать)
Получить Название родителя раздела инфоблока
И в качестве дополнения, способ как вывести родителя, зная ID потомка, раздела инфоблока
Итак, пользователь выбрал разделы «Другая бытовая техника» и «Малая бытовая техника». Нам же нужно вывести родителя этих разделов «Ремонт бытовой техники»
Мы, способом описанным выше, может получить ID всех разделов, но нам достаточно одного, если он имеет родителя то и все остальные. Поэтому просто прерываем while на втором шаге шаге
И просто выводим вот такую конструкцию, в которую подстваили ID одного из известных разделов методом CIBlockSection::GetByID
В общем-то и все. Скорее всего я избыточно использую переменные, в паре мест можно было обойтись без них, но постарался разложить способ на молекулы. Все вопросы, прошу задавать в комментариях
«Привзяка к элементу» и «Привязка к разделу»
Каталог, задание свойств информационного блока. Возьмем пример из демо версии «Телефоны».
В демонстрационной пробной версии продукта мы можете увидеть использование свойств типа «Привязка к элементу» на примере инфоблока аксессуаров, одно из свойств которого имеет такой тип. В это свойство записывается (с помощью удобного интерфейса в адм. части) ID элемента инфоблока телефонов, с которым связан элемент-аксессуар.
Аналогично работает и тип свойства «привязка к разделу», позволяющее удобно привязать элемент к ID группы любого инфоблока. Обратите внимание, что в этом случае привязкой к группе будет считаться именно эта привязка через свойство, а не «стандартная» привязка к группе того же инфоблока, что и инфоблок элемента.
Большое спасибо за разъяснения. С привязкой к элементу разобрался. Резульататом такой привязки является то, что при детальном показе элемента дается ссылка на перечень «сопутсвующих» товаров для него. Очень гибко и логично, впечатлен.
Хотел бы теперь все же разобраться с привязкой к разделу. Поэкспериментировал малость. Для инфоблока типа «Аксесуар» добавил свойство «Привязка к разделу». В качестве раздела выбрал «Телефоны». Теперь хотел бы
для аксессуара «Переносное зарядное устройство Siemens ETC-500» привязать его к разделу Телефонов «Siemens». Захожу в его свойства и выбираю. Првязка осуществлена.
Вопрос. Как теперь эту связь отображать графически. В случае «привязки к эелементу» её свойсва можно задать в блоке «элемент каталога детально». Как быть в случае «Привязка к разделу»?
Цитата |
---|
Хотел бы теперь все же разобраться с привязкой к разделу. Поэкспериментировал малость. Для инфоблока типа «Аксесуар» добавил свойство «Привязка к разделу». В качестве раздела выбрал «Телефоны». |
Эта фича «привязка к разделу» мне очень интересна, так как планируется использовать большое количество элементов каталога и устанавливать связь с ними. Хотелось бы разобраться.
Тип свойства «Привязка к разделам»
Собственно вопрос в теме «Можно ли как-то привязать элемент к разделам своего инфоблока?». По умолчанию установлена привязка к разделам другого инфоблока, а к своему можно как-то??
Цитата |
---|
Юрий Шубин пишет: Дмитрий Яковенко, дело в том, что логичней было бы привязать элемент именно к разделам своего инфоблока в моем случае. Неудобно разносить смежные элементы по разным инфоблокам… |
Задача может быть такой: есть каталог товаров. Один товар может принадлежать нескольким разделам. Например, «Шахматы» могут принадлежать разделам «Изделия из дерева» и «Игры». Необходимо сделать так, чтобы УРЛ элемента был один, причем определенный. Т.е. /game/chess/ или /wood/chess/. Битрикс, как я понял, выдает раздел с наименьшим ID, а мне нужен однозначно определенный раздел.
Вопрос остается открытым.
Задача ясна: вы можете привязать элемент к нескольким разделам, но вам хотелось бы закрепить элемент за одним главным разделом потому что из его кода строится URL до элемента. И этот главный раздел не всегда с меньшим ID (т.е. не всегда попадает в IBLOCK_SECTION_ID элемента.)
Можно попробовать свой пользовательский тип свойства привязки к разделам создать, в котором разрешить привязку к разделам родного инфоблока. Только в этом случае все равно же, привязанные таким образом элементы не будут в списке элементов данных разделов выводиться.
Может попробовать по событию при сохранении элемента IBLOCK_SECTION_ID перезаписывать. Значение для него как раз брать из свойства пользовательского типа привязки к родным разделам. Т.е. в этом свойстве вы будите как раз выставлять основной раздел. Как БУС поведет себя при этом не знаю.