Июль 11, 2024
Теги: Инфоблоки, Перенос данных
Работа с настройками свойств для вывода в списке, на детальной странице товара. Класс "\Bitrix\Iblock\Model\PropertyFeature".
Вывод значений галочек "Показывать на странице списка элементов", "Показывать на детальной странице элемента" инфоблока с ID=16, например, для сохранения в php файл для последующего переноса на другой сайт (сохраняются символьные коды свойств):
\Bitrix\Main\Loader::includeModule('iblock');
$iblockId = 16;
$listShowPropertyId = \Bitrix\Iblock\Model\PropertyFeature::getListPageShowPropertyCodes($iblockId);
$detailShowPropertyId = \Bitrix\Iblock\Model\PropertyFeature::getDetailPageShowPropertyCodes($iblockId);
$rsProperty = \Bitrix\Iblock\PropertyTable::getList(array(
'filter' => array(
'IBLOCK_ID' => $iblockId,
'=ID' => $listShowPropertyId,
),
'select' => array(
'ID','CODE',
),
));
$listShowPropertyCode = [];
while($property=$rsProperty->fetch())
{
$listShowPropertyCode[] = $property['CODE'];
}
$rsProperty = \Bitrix\Iblock\PropertyTable::getList(array(
'filter' => array(
'IBLOCK_ID' => $iblockId,
'=ID' => $detailShowPropertyId,
),
'select' => array(
'ID','CODE',
),
));
$detailShowPropertyCode = [];
while($property=$rsProperty->fetch())
{
$detailShowPropertyCode[] = $property['CODE']?;
}
var_dump($listShowPropertyCode);
var_dump($detailShowPropertyCode);
Восстановление галочек в инфоблоке ID=10 на основе данных из предыдущего скрипта (также источником могут служить соответствующие параметры компонентов "bitrix:news", "bitrix:catalog"):
$countListShowPropertyCodeSet = 0;
$countDetailShowPropertyCodeSet = 0;
\Bitrix\Main\Loader::includeModule('iblock');
$iblockId = 10;
$rsProperty = \Bitrix\Iblock\PropertyTable::getList(array(
'filter' => array(
'IBLOCK_ID' => $iblockId,
),
'select' => array(
'ID','CODE','NAME',
),
));
while($property=$rsProperty->fetch())
{
var_dump($property);
$propertyFeatureSet = [];
if(in_array($property['CODE'],$listShowPropertyCode))
{
echo "Да, найдено для для списка\n";
$countListShowPropertyCodeSet++;
$propertyFeatureSet[] = [
"MODULE_ID"=>"iblock",
"IS_ENABLED"=>"Y",
"FEATURE_ID" => "LIST_PAGE_SHOW"
];
}
else
{
echo "Нет, не найдено для списка, сбрасываем\n";
}
if(in_array($property['CODE'],$detailShowPropertyCode))
{
echo "Да, найдено для детальной\n";
$countDetailShowPropertyCodeSet++;
$propertyFeatureSet[] = [
"MODULE_ID"=>"iblock",
"IS_ENABLED"=>"Y",
"FEATURE_ID" => "DETAIL_PAGE_SHOW"
];
}
else
{
echo "Нет, не найдено для детальной, сбрасываем\n";
}
\Bitrix\Iblock\Model\PropertyFeature::setFeatures($property['ID'],$propertyFeatureSet);
}
var_dump($countListShowPropertyCodeSet,$countDetailShowPropertyCodeSet);