Настройки свойств элементов для разделов

Модуль расширенного управления меню для битрикс

Май 23, 2024

Теги: Инфоблоки, ORM, Перенос данных

Работа с настройками свойств элементов инфоблока для разделов, используются, например, для добавления свойств элементов в умный фильтр для конкретных разделов. Класс "\Bitrix\Iblock\SectionPropertyTable".

Вывод всех настроек свойств элементов инфоблока с ID=16 для разделов, для которых установлена галочка "Выводить в умном фильтре", например, для сохранения в php файл для последующего переноса на другой сайт:


\Bitrix\Main\Loader::includeModule('iblock');


$rsSectionProperty \Bitrix\Iblock\SectionPropertyTable::getList(array(
    
'filter' => array(
        
'IBLOCK_ID' => 16,
        
'SMART_FILTER' => 'Y',
        
'>SECTION_ID' => 0,
    ),
    
'select' => array(
        
'*',
        
'PROPERTY_XML_ID'=>'PROPERTY.XML_ID',
        
'SECTION_XML_ID'=>'SECTION.XML_ID',
        
'PROPERTY_NAME'=>'PROPERTY.NAME',
        
'SECTION_NAME'=>'SECTION.NAME',
    ),
));

while(
$sectionProperty=$rsSectionProperty->fetch())
{
    
var_export($sectionProperty);
    echo 
",\n";
}

Пример восстановления настроек из данных на основе предыдущего скрипта:


\Bitrix\Main\Loader::includeModule('iblock');

require(
$_SERVER['DOCUMENT_ROOT'].'/temp/section_to_property.php');

$iblockId 10;

$notFoundProperty 0;
$notFoundSection 0;
foreach(
$sectionToProperty as $item)
{
    
print_r($item);
    
$property \Bitrix\Iblock\PropertyTable::getList(array(
        
'filter' => array(
            
'IBLOCK_ID' => $iblockId,
            
'XML_ID' => $item['PROPERTY_XML_ID'],
        ),
        
'select' => array(
            
'ID',
            
'NAME',
        ),
        
'limit' => 1,
    ))->
fetch();
    if(!
$property)
        
$notFoundProperty++;
    
$section \Bitrix\Iblock\SectionTable::getList(array(
        
'filter' => array(
            
'IBLOCK_ID' => $iblockId,
            
'XML_ID' => $item['SECTION_XML_ID'],
        ),
        
'select' => array(
            
'ID',
            
'NAME',
        ),
        
'limit' => 1,
    ))->
fetch();
    if(!
$section)
        
$notFoundSection++;
    if(!
$property || !$section)
        continue;

    
print_r($property);
    
print_r($section);

    
$rsSectionProperty \Bitrix\Iblock\SectionPropertyTable::getList(array(
        
'filter' => array(
            
'IBLOCK_ID' => $iblockId,
            
'SECTION_ID' => $section['ID'],
            
'PROPERTY_ID' => $property['ID'],
        ),
        
'select' => array(
            
'*',
            
'PROPERTY_XML_ID'=>'PROPERTY.XML_ID',
            
'SECTION_XML_ID'=>'SECTION.XML_ID',
            
'PROPERTY_NAME'=>'PROPERTY.NAME',
            
'SECTION_NAME'=>'SECTION.NAME',
        ),
    ));

    if(
$sectionProperty=$rsSectionProperty->fetch())
    {
        echo 
"Да, найдено, обновляем\n";
        
print_r($sectionProperty);
        
\Bitrix\Iblock\SectionPropertyTable::update(array(
            
'IBLOCK_ID' => $sectionProperty['IBLOCK_ID'],
            
'SECTION_ID' => $sectionProperty['SECTION_ID'],
            
'PROPERTY_ID' => $sectionProperty['PROPERTY_ID'],
        ),array(
            
'SMART_FILTER' => 'Y',
            
'DISPLAY_EXPANDED' => $item['DISPLAY_EXPANDED'],
            
'DISPLAY_TYPE' => $item['DISPLAY_TYPE'],
            
'FILTER_HINT' => $item['FILTER_HINT'],
        ));
    }
    else 
    {
        echo 
"Нет, не найдено, добавляем\n";
        
\Bitrix\Iblock\SectionPropertyTable::add(array(
            
'IBLOCK_ID' => $iblockId,
            
'SECTION_ID' => $section['ID'],
            
'PROPERTY_ID' => $property['ID'],
            
'SMART_FILTER' => 'Y',
            
'DISPLAY_EXPANDED' => $item['DISPLAY_EXPANDED'],
            
'DISPLAY_TYPE' => $item['DISPLAY_TYPE'],
            
'FILTER_HINT' => $item['FILTER_HINT'],
        ));
    }
}

echo 
"Не найдено свойство: ".$notFoundProperty."\n";
echo 
"Не найден раздел: ".$notFoundSection."\n";

См. также:

← Переход к списку