Массовое изменение отображения свойств в детальной карточке 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 — Показывать на детальной странице элемента