Мне кажется, что для восприятия примера требуется значительно большее содержание дзена в крови, чем это дано среднему земному гуманоиду. Понизить планку можно с помощью такого кода:

| Код |
|---|
/*
* Пример вызова функции:
* CopyFromFieldsToPropertiesValues(22, array('DATE_ACTIVE_FROM','DATE_ACTIVE_TO'), array('DATE_BEGIN','DATE_END'));
*/
function CopyFromFieldsToPropertiesValues ($iblockId, $arFromFieldNames, $arToPropertyNames)
{
// Подключение модуля инфоблоков:
if (!CModule::IncludeModule('iblock')) die('Модуль iblock не установлен');
// Проверка входных параметров:
if (!is_array($arFromFieldNames))
throw new \Bitrix\Main\ArgumentTypeException('arFromFieldNames', 'array');
if (!is_array($arToPropertyNames))
throw new \Bitrix\Main\ArgumentTypeException('arToPropertyNames', 'array');
if (count($arFromFieldNames) != count($arToPropertyNames))
throw new \Bitrix\Main\ArgumentException('Число свойств не равно числу полей', 'arToPropertyNames');
$iblockId = intval($iblockId);
if ($iblockId == 0)
throw new \Bitrix\Main\ArgumentException('Нулевое значение Id инфоблока', 'iblockId');
if (count($arFromFieldNames) <= 0) return;
// Запросим ID и требуемые поля для всех элементов указанного инфоблока:
$dbElements = CIBlockElement::GetList(
array(), // arOrder (Без сортировки)
array('IBLOCK_ID' => $iblockId), // arFilter (Все элементы инфоблока с указанным ID)
false, // arGroupBy (Не группировать)
false, // arNavStartParams (Без постраничной навигации)
array_merge(array('ID'), $arFromFieldNames) // arSelectFields (Нам нужны ID и требуемые поля)
);
// Перебираем результаты:
while ($arElement = $dbElements->Fetch())
{
// Подготовим массив для SetPropertyValuesEx():
$arPropertyValues = array();
foreach ($arToPropertyNames as $key => $propertyName)
{
$arPropertyValues[$propertyName] = $arElement[$arFromFieldNames[$key]];
}
// Изменяем требуемые свойства для найденного элемента:
CIBlockElement::SetPropertyValuesEx(
$arElement['ID'], // ELEMENT_ID
$iblockId, // IBLOCK_ID
$arPropertyValues // PROPERTY_VALUES
//, array() // FLAGS
);
/*
// Вместо вызова SetPropertyValuesEx() можно установить каждое свойство отдельным вызовом SetPropertyValues().
// В этом случае нам не нужно создавать массив $arPropertyValues, но будет выполнено больше запросов к базе данных:
foreach ($arToPropertyNames as $key => $propertyName)
{
// Установим значение каждого требуемого свойства из полученных результатов:
CIBlockElement::SetPropertyValues(
$arElement['ID'], // ELEMENT_ID
$iblockId, // IBLOCK_ID
$arElement[$arFromFieldNames[$key]], // PROPERTY_VALUES
$propertyName // PROPERTY_CODE
);
}
*/
}
if (!isset($arPropertyValues))
throw new Exception('Не найдены поля инфоблока с ID='.$iblockId);
} |
