Как установить превью элементам одной категории инфоблока, если их в ней 300 штук?
Иногда бывает, что нужно установить одну картинку в качестве превью не одному, а многим элементам инфоблока: когда элементов 1000, 2000 и т.д. Причем не каким попало элементам, а из определенной категории. В этой статье напишем небольшой скрипт, который решает подобную задачу. Для начала загрузим в систему нужный файл изображения. Его Вы можете загрузить либо через коллекцию изображений, либо в элемент инфоблока нужной категории. После загрузки нам понадобится ID изображения, которое вы можете посмотреть через диспетчер кода, наведя указатель мыши на изображение. Еще нам понадобятся ID инфоблока и ID нужной категории инфоблока.
// ID инфоблока
$iblockId = 54;
// ID категории
$categoryId = 495;
// ID файла - изображения
$previewPictureId = 18246;
// Подключаем модуль Инфоблоки
if (!CModule::IncludeModule("iblock")) {
return "Модуль iblock не подключен.";
}
//Получаем элементы из нужной категории
$elements = CIBlockElement::GetList(
array(),
array(
"IBLOCK_ID" => $iblockId,
"SECTION_ID" => $categoryId
),
false,
false,
array("ID")
);
// Далее, пробегаем в цикле по отобранным элементам и записываем в поле PREVIEW_PICTURE id файла картинки
while ($element = $elements->GetNext()) {
$elementId = $element["ID"];
// Обновляем элемент, устанавливаем превью
$result = CIBlockElement::SetFieldsValues(array(
$elementId => array(
"PREVIEW_PICTURE" => $previewPictureId
)
));
if ($result) {
echo "Превью установлено для элемента ID:".$elementId."
";
} else {
echo = "Ошибка установки превью для элемента ID:".$elementId."
";
}
}
Модифицируя данный скрипт, можно устанавливать с его помощью не только поля, но и свойства элементов

