Массовые замены в названиях или других элементах инфоблоков Битрикс
Скрипт позволяет пройтись по указанным полям (['ID', 'NAME']) инфоблока ($IBID) и выполнить в нем необходимые замены. В данном примере - убрать лишние точки из названия и вывести на экран потом всю отладочную информацию и полученный результат
/**
* This script will go through all elements of IBLOCK_ID = 2 and check their names for errors.
* If an error is found, it will be logged to the console and the name will be corrected.
* The corrected name will also be logged to the console.
* Finally, the element will be updated with the new name.
*/
CModule::IncludeModule('iblock');
// The ID of the information block to process
$IBID = 2;
// Get a list of all elements in the information block
$obj = CIBlockElement::GetList(
[], // Filter
['IBLOCK_ID' => $IBID], // Filter by information block
false, // Don't use cache
false, // Don't use filter
['ID', 'NAME'] // Return only ID and NAME fields
);
// Iterate over all elements
while ($item = $obj->GetNext()) {
$newName = false;
// Check if the name contains the first error
if (mb_strpos($item['NAME'], '. - ') !== false) {
// Log the error to the console
echo 'Имя с ошибкой №1 у товара ID ' . $item['ID'] . ': ' . $item['NAME'] . "\r\n";
// Correct the name
$newName = str_replace('. - ', ' - ', $item['NAME']);
}
// Check if the name contains the second error
if (mb_strpos($item['NAME'], ' ,') !== false) {
// Log the error to the console
echo 'Имя с ошибкой №2 у товара ID ' . $item['ID'] . ': ' . $item['NAME'] . "\r\n";
// Correct the name
$newName = str_replace([' , ',' ,'], ', ', $item['NAME']);
}
// If the name was corrected, log the new name to the console and update the element
if ($newName) {
echo 'Новое: ' . $newName . "\r\n";
// Update the element
$el = new CIBlockElement;
$arFields = ['NAME' => $newName];
$q = $el->Update($item['ID'], $arFields);
if ($q) {
echo "- Обновлено название\r\n\r\n";
}
}
}