Наследование пользовательских свойств в подразделах

725
Алексей,
Наследование пользовательских свойств в подразделах

Чтобы не заполнять все поля у каждого раздела, часть можно "наследовать", сделав пару доп. запросов в компоненте.

Чтобы не заполнять все поля у каждого раздела, часть можно "наследовать", сделав пару доп. запросов в компоненте.

$arSection = []; // Массив с параметрами текущего раздела

// Если свойство не заполнено у текущего раздела, поищем у родителей
if (!$arSection['UF_PROP'] && $arSection['IBLOCK_SECTION_ID'] > 0) { 
	$sectionId = $arSection['IBLOCK_SECTION_ID']; // Поиск начнём сразу с родительского раздела
	$entity = \Bitrix\Iblock\Model\Section::compileEntityByIblock($arSection["IBLOCK_ID"]);
	while($sectionId) { // Перебираем все родительские разделы
		if ($arParentSection = $entity::getList([
			'filter' => ['IBLOCK_ID' => $arSection["IBLOCK_ID"], 'ID' => $sectionId],
			'select' => ['ID', 'IBLOCK_ID', 'IBLOCK_SECTION_ID', 'UF_PROP']
		])->fetch()) {
			if ($arParentSection['UF_MAIN_PROPS']) { // Нужное свойство заполнено у родителя, сохраняем и выходим
				$arSection['UF_MAIN_PROPS'] = $arParentSection['UF_PROP'];
				break;
			}
		}
		$sectionId = $arParentSection['IBLOCK_SECTION_ID'];
	}
}

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 13 февраля 2023
разделы, примеры кода, инфоблоки, разработчику, примеры d7
Поделиться
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Чтобы не заполнять все поля у каждого раздела, часть можно "наследовать", сделав пару доп. запросов в компоненте.