Массовое изменение отображения свойств в детальной карточке 1С-Битрикс
Столкнулся с задачей, когда на клиентском сайте более 500 пользовательских свойств в инфоблоке и необходимо было в настройках (параметры свойства) у всех включить «Показывать на детальной странице элемента».

Само собою, вручную тыкать в 500-1000 свойств и проставлять это свойство — не наш метод. И вот на помощь пришел метод setFeatures класса \Bitrix\Iblock\Model\PropertyFeature (само собою, плохо документированный в официальной документации).
В результате получился такой простенький php-скрипт:
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 — Показывать на детальной странице элемента