Блог специалистов
06.06.2017

Массовое изменение свойства элементов инфоблока в Битрикс

Бывает необходимость изменить какое-либо свойство элемента массово. Для этого есть в Маркетплейс решения, которые упрощают работу, но нам ведь этого мало. Хочется сделать своими руками и бесплатно, тем более, что интернет всегда под рукой и кто-то же должен был уже это делать и бескорыстно поделиться с коллегами :)

Если вы хоть чуть-чуть читаете php скрипты и работаете с Битриксом, то далее вам все будет ясно и понятно.

Создаем файлик в корне сайта например script.php, в него добавляем код, модифицируем его под свои параметры и запускаем http://сайт.ru/script.php

Этот код изменяет код в дате активности элементов:

<? require($_SERVER["DOCUMENT_ROOT"]. "/bitrix/header.php");

//Подключаем модуль работы с инфоблоками CModule::IncludeModule('iblock');

//Уточняем какой будем использовать инфоблок $arFilter = array( 'IBLOCK_ID' => 4, ); //Получаем массив всех элементов $res = CIBlockElement::GetList(false, $arFilter, array('IBLOCK_ID','ID'));

//Перебираем все элементы инфоблока и записываем в массив их IDшники while($el = $res->GetNext()): echo $arElementsID[] = $el['ID']; endwhile;

//Получаем ID и дату активнсти у каждого элемента в массив //заменяем 2015 года на 2016 //и пишем новый массив, где индекс будет ID элемента, а значение - Дата активности foreach($arElementsID as $key): $arFilter = array( 'IBLOCK_ID' => 4, 'ID' => $key ); $res = CIBlockElement::GetList(false, $arFilter, array('ID','DATE_ACTIVE_FROM')); $key = $res -> Fetch(); $arElementsData[$key['ID']] = str_replace('2015','2016', $key['DATE_ACTIVE_FROM']); endforeach;

//Обновляем поле "Дата активности" у каждого элемента foreach($arElementsData as $key => $value): $ELEMENT_ID = $key; $cbe = new CIBlockElement; $cbe -> Update($ELEMENT_ID, array('DATE_ACTIVE_FROM' => $value)); if($cbe): echo "OK!<br>"; else: echo "FAIL!<br>"; endif; endforeach;

require($_SERVER["DOCUMENT_ROOT"]. "/bitrix/footer.php"); ?>



Этот код изменяет сортировку в элементах выбранных по свойству:

<? require($_SERVER["DOCUMENT_ROOT"]. "/bitrix/header.php");

//Подключаем модуль работы с инфоблоками CModule::IncludeModule('iblock');

//Уточняем какой будем использовать инфоблок и элементы с каким свойством нам нужны $arFilter = array( 'IBLOCK_ID' => 4, 'PROPERTY_КОД_СВОЙСТВА' => "Merizol", ); //Получаем массив всех элементов $res = CIBlockElement::GetList(false, $arFilter, array('IBLOCK_ID','ID'));

//Перебираем все элементы инфоблока и записываем в массив их IDшники while($el = $res->GetNext()): $arElementsID[] = $el['ID']; endwhile; //echo '<pre>'.print_r($arElementsID).'</pre>';

//Получаем ID и сортировку у каждого элемента в массив //заменяем 100 года на 50 //и пишем новый массив, где индекс будет ID элемента, а значение - Сортировка foreach($arElementsID as $key): $arFilter = array( 'IBLOCK_ID' => 4, 'ID' => $key ); $res = CIBlockElement::GetList(false, $arFilter, array('ID','SORT')); $key = $res -> Fetch(); $arElementsData[$key['ID']] = str_replace('100','50', $key['SORT']); endforeach;

//Обновляем поле "Сортировка" у каждого элемента foreach($arElementsData as $key => $value): $ELEMENT_ID = $key; $cbe = new CIBlockElement; $cbe -> Update($ELEMENT_ID, array('SORT' => $value)); if($cbe): echo "OK!<br>"; else: echo "FAIL!<br>"; endif; endforeach;

require($_SERVER["DOCUMENT_ROOT"]. "/bitrix/footer.php"); ?>


Количество показов: 15048




Возврат к списку