Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
С помощью живого апи, в модуле инфоблоков были найдены следующие методы:
Названия методов и параметры говорят сами за себя, и в принципе на этом можно было бы и закончить.
Но рассмотрим некоторые из них подробнее, хотя это и будет по большому счету кэпством. 
Так как методы найдены в модуле инфоблоков, то перед их использованием, требуется его подключить: 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":
Подробнее об CIBlock::Update:
2. Включаем свойство в умный фильтр:
Подробнее об CIBlockProperty::Update:
3. Скрипт для постепенного перевода сайта на умный фильтр:
Например можно разместить в result_modifier.php у комплексного компонента catalog, и по мере посещения ваших каталогов, свойства будут включены в умный фильтр на основе текущих настроек компонента.
Полезные ссылки:
1. Slyshkina Anna, “Настраиваем зависимость свойств товаров от категорий (умный фильтр)”:
2. Модуль “Живое описание АПИ”:
Разбираться помогал Денис Зимин из ROMZA
P.S. Если где-то что-то упустил, не так понял, допустил неточности или ошибки, пишите - внесу исправления. В листинге могут быть косяки, т.к. правил уже после вставки в блог, в попытке выровнять и т.д.
Назад в раздел
Наверх
то ждем ваше обращение в нашей службе тех поддержки.
Привязка свойств к разделам и умный фильтр (API)
Выполняя задачу, связанную с обработкой свойств привязанных к разделам и умным фильтром, столкнулся с недостатком информации. Первым делом обратился к справке битрикса, не найдя там ответов на вопросы, пошел к поисковикам с запросом “CIBlockSectionPropertyLink”, обнаружил почти пустую выдачу. Дальше началось исследование с помощью “Живого описания АПИ”, изучения кода методов и экспериментов, результатами которого я и хочу поделиться в данном посте.С помощью живого апи, в модуле инфоблоков были найдены следующие методы:
CIBlockSectionPropertyLink::Add($SECTION_ID, $PROPERTY_ID, $arLink = array()) CIBlockSectionPropertyLink::Delete($SECTION_ID, $PROPERTY_ID) CIBlockSectionPropertyLink::DeleteByIBlock($IBLOCK_ID) CIBlockSectionPropertyLink::DeleteByProperty($PROPERTY_ID) CIBlockSectionPropertyLink::DeleteBySection($SECTION_ID) CIBlockSectionPropertyLink::GetArray($IBLOCK_ID, $SECTION_ID = 0, $bNewSection = false) |
Названия методов и параметры говорят сами за себя, и в принципе на этом можно было бы и закончить.
Но рассмотрим некоторые из них подробнее, хотя это и будет по большому счету кэпством. 
Так как методы найдены в модуле инфоблоков, то перед их использованием, требуется его подключить: 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 - не совсем понял или совсем не понял, на что влияет

Метод возвращает массив с параметрами свойств, выводимые в порядке увеличения сортировки:
Array ( [33] => Array ( [PROPERTY_ID] => 33 [SMART_FILTER] => N [INHERITED] => Y [INHERITED_FROM] => 0 [SORT] => 10 ) … ) |
Где PROPERTY_ID - идентификатор свойства, равен индексу первого уровня в данном массиве,
SMART_FILTER - включено свойство в умный фильтр или нет,
INHERITED- наследуется это свойство или привязано непосредственно к разделу
INHERITED_FROM - откуда наследуется, если 0, то от инфоблока, если значение отличное от нуля - то это идентификатор раздела, от которого унаследовано свойство.
SORT - сортировка.
Тонкости и примеры использования
1. В случае если свойства не привязываются к разделу (или в админке у разделов нет вкладки "Свойства элементов"), нужно установить у инфоблока "SECTION_PROPERTY" => "Y":
$ib = new CIBlock; $res = $ib->Update($iblock_id, array( "SECTION_PROPERTY" => "Y", )); |
Подробнее об CIBlock::Update:
2. Включаем свойство в умный фильтр:
$arFields = Array('SMART_FILTER' => 'Y', 'IBLOCK_ID' => $arProp['IBLOCK_ID']) ;
$ibp = new CIBlockProperty();
$ibp->Update($PROPERTY_ID, $arFields) ;
|
Подробнее об CIBlockProperty::Update:
3. Скрипт для постепенного перевода сайта на умный фильтр:
Например можно разместить в result_modifier.php у комплексного компонента catalog, и по мере посещения ваших каталогов, свойства будут включены в умный фильтр на основе текущих настроек компонента.
if(COption::GetOptionString("to_smart_filter", "smart_filter_{$arParams['IBLOCK_ID']}", 'N') != ‘Y’)
{
$error_convert_to_smart = false ;
foreach ($arParams['FILTER_PROPERTY_CODE'] as $prop_code)
{
if(strlen($prop_code) && $arParams['IBLOCK_ID'])
{
$arProp = CIBlockProperty::GetByID($prop_code, $arParams['IBLOCK_ID'])->Fetch() ;
if($arProp['ID'] && $arProp['CODE'] == $prop_code && $arProp['SMART_FILTER'] != 'Y')
{
$arFields = Array('SMART_FILTER' => 'Y', 'IBLOCK_ID' => $arProp['IBLOCK_ID']) ;
$ibp = new CIBlockProperty();
if(!$ibp->Update($arProp['ID'], $arFields))
{
if($USER->IsAdmin()) { echo '<br/>'.$ibp->LAST_ERROR; }
$error_convert_to_smart= true ;
}
}
}
}
if(!$error_convert_to_smart)
{
COption::SetOptionString("to_smart_filter", "smart_filter_{$arParams['IBLOCK_ID']}", 'Y');
}
}
|
Полезные ссылки:
1. Slyshkina Anna, “Настраиваем зависимость свойств товаров от категорий (умный фильтр)”:
2. Модуль “Живое описание АПИ”:
Разбираться помогал Денис Зимин из ROMZA
P.S. Если где-то что-то упустил, не так понял, допустил неточности или ошибки, пишите - внесу исправления. В листинге могут быть косяки, т.к. правил уже после вставки в блог, в попытке выровнять и т.д.
Назад в раздел
Подписаться на новые материалы раздела:
Загрузка...
Наверх