Столкнулся с задачей, когда на клиентском сайте более 500 пользовательских свойств в инфоблоке и необходимо было в настройках (параметры свойства) у всех включить «Показывать на детальной странице элемента».
Само собою, вручную тыкать в 500-1000 свойств и проставлять это свойство — не наш метод. И вот на помощь пришел метод setFeatures класса \Bitrix\Iblock\Model\PropertyFeature (само собою, плохо документированный в официальной документации).
В результате получился такой простенький php-скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
if (\Bitrix\Main\Loader::includeModule('iblock')) { $IBLOCK_ID = 1; // Идентификатор инфоблока $properties = CIBlockProperty::GetList( Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$IBLOCK_ID) ); while ($prop_fields = $properties->GetNext()) { if($prop_fields["SORT"]>=500) { // В моем случае я менял только у тех свойств, у которых сортировка более 500, чтобы не трогать служебные свойства \Bitrix\Iblock\Model\PropertyFeature::setFeatures( $prop_fields["ID"],[[ "MODULE_ID"=>"iblock", "IS_ENABLED"=>"Y", "FEATURE_ID" => "DETAIL_PAGE_SHOW" ]] ); } } } |
Если поковыряться в БД Битрикса, то найдете там таблицу b_iblock_property_feature в которой хранятся эти настройки отображения свойства. И оттуда мы узнаем, что в методе setFeatures мы среди параметров можем передать под ключом FEATURE_ID такие значения:
- LIST_PAGE_SHOW — Показывать на странице списка элементов
- DETAIL_PAGE_SHOW — Показывать на детальной странице элемента
Спасибо! Первый раз столкнулся с такой же ситуацией. Документация Битрикса ответа не дала(
стоит отметить что в шаблоне карточки данные свойства падают в массив DISPLAY_PROPERTIES
Спасибо
Такая же ситуация.. а куда этот код ставить и как запускать?