Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Привязка свойств к разделам и умный фильтр (API)
Выполняя задачу, связанную с обработкой свойств привязанных к разделам и умным фильтром, столкнулся с недостатком информации. Первым делом обратился к справке битрикса, не найдя там ответов на вопросы, пошел к поисковикам с запросом “CIBlockSectionPropertyLink”, обнаружил почти пустую выдачу. Дальше началось исследование с помощью “Живого описания АПИ”, изучения кода методов и экспериментов, результатами которого я и хочу поделиться в данном посте.
С помощью живого апи, в модуле инфоблоков были найдены следующие методы:
Названия методов и параметры говорят сами за себя, и в принципе на этом можно было бы и закончить. Но рассмотрим некоторые из них подробнее, хотя это и будет по большому счету кэпством.
Так как методы найдены в модуле инфоблоков, то перед их использованием, требуется его подключить: CModule::IncludeModule("iblock");
1. CIBlockSectionPropertyLink::Add($SECTION_ID, $PROPERTY_ID, $arLink = array()) Метод добавляет связь между разделом и свойством инфоблока.
Параметры: $SECTION_ID - идентификатор раздела, либо 0, если требуется привязать свойство ко всему инфоблоку. $PROPERTY_ID - идентификатор свойства. Требуются именно идентификаторы, символьные коды не подойдут.
$arLink - в данный момент может содержать 2 ключа, это IBLOCK_ID и SMART_FILTER. В свою очередь $arLink = array(‘SMART_FILTER’ => ‘Y’) - включить свойство в умный фильтр, если свойство в умный фильтр включать не требуется, можно просто не указывать SMART_FILTER, либо $arLink = array(‘SMART_FILTER’ => ‘N’).
2. CIBlockSectionPropertyLink::Delete($SECTION_ID, $PROPERTY_ID) Метод позволяет отвязать свойство от раздела или инфоблока.
$SECTION_ID - идентификатор раздела, либо 0, если требуется отвязать свойство от инфоблока. $PROPERTY_ID - идентификатор свойства.
Отвязать свойство от инфоблока, может потребоваться, если данное свойство не должно быть привязанным ко всем разделам инфоблока. Т.е. после или до привязки свойств к разделам с помощью CIBlockSectionPropertyLink::Add, требуется выполнить CIBlockSectionPropertyLink::Delete(0, $PROPERTY_ID), чтобы отвязать от инфоблока и не выводить их во всех разделах.
3. CIBlockSectionPropertyLink::DeleteByIBlock($IBLOCK_ID) Метод отвязывает все свойства от разделов в инфоблоке и выключает возможность привязывать их (свойство инфоблока “SECTION_PROPERTY” становится равным “N”).
$IBLOCK_ID - идентификатор инфоблока в котором требуется отвязать все свойства от разделов.
4. CIBlockSectionPropertyLink::DeleteByProperty($PROPERTY_ID) Метод отвязывает свойство с идентификатором $PROPERTY_ID от всех разделов.
5. CIBlockSectionPropertyLink::DeleteBySection($SECTION_ID) Метод отвязывает все свойства от раздела с идентификатором $SECTION_ID
6. CIBlockSectionPropertyLink::GetArray($IBLOCK_ID, $SECTION_ID = 0, $bNewSection = false) $IBLOCK_ID - идентификатор инфоблока, $SECTION_ID - идентификатор раздела, либо 0 - будут собраны свойства инфоблока, $bNewSection - не совсем понял или совсем не понял, на что влияет
Метод возвращает массив с параметрами свойств, выводимые в порядке увеличения сортировки:
Где PROPERTY_ID - идентификатор свойства, равен индексу первого уровня в данном массиве, SMART_FILTER - включено свойство в умный фильтр или нет, INHERITED- наследуется это свойство или привязано непосредственно к разделу INHERITED_FROM - откуда наследуется, если 0, то от инфоблока, если значение отличное от нуля - то это идентификатор раздела, от которого унаследовано свойство. SORT - сортировка.
Тонкости и примеры использования 1. В случае если свойства не привязываются к разделу (или в админке у разделов нет вкладки "Свойства элементов"), нужно установить у инфоблока "SECTION_PROPERTY" => "Y":
3. Скрипт для постепенного перевода сайта на умный фильтр: Например можно разместить в result_modifier.php у комплексного компонента catalog, и по мере посещения ваших каталогов, свойства будут включены в умный фильтр на основе текущих настроек компонента.
P.S. Если где-то что-то упустил, не так понял, допустил неточности или ошибки, пишите - внесу исправления. В листинге могут быть косяки, т.к. правил уже после вставки в блог, в попытке выровнять и т.д.