В последнее время многие владельцы интернет-магазинов, работающих на CMS 1С-Битрикс, сталкиваются с необходимостью массового переименования товаров. Причины могут быть самые разные: от ребрендинга до корректировки наименований в соответствии с SEO-требованиями. Однако при переименовании важно сохранить регистр символов: заглавные буквы должны остаться заглавными, а строчные – строчными. Ниже приведён рабочий скрипт на PHP, который решает эту задачу автоматизированно и безопасно.

В конце статьи приведены скриншоты, показывающие результат исполнения скрипта.
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if (CModule::IncludeModule("iblock")) {
$iblockId = 2; // ID инфоблока
$searchString = "штаны";
$replaceString = "брюки";
// Получаем элементы инфоблока
$arFilter = [
"IBLOCK_ID" => $iblockId,
"ACTIVE" => "Y",
"%NAME" => $searchString
];
$elements = CIBlockElement::GetList([], $arFilter, false, false, ["ID", "NAME"]);
while ($element = $elements->GetNext()) {
// Функция для замены с учетом регистра
$newName = preg_replace_callback(
"/\b($searchString)\b/iu",
function ($matches) use ($replaceString) {
$originalWord = $matches[0];
// Сохраняем регистр оригинального слова
$newWord = $replaceString;
// Сравниваем регистр оригинального слова и заменяем
if (mb_strtoupper($originalWord) === $originalWord) {
return mb_strtoupper($newWord); // Все заглавные
} elseif (mb_strtolower($originalWord) === $originalWord) {
return mb_strtolower($newWord); // Все строчные
} else {
// Сохраняем регистр первой буквы
return mb_strtoupper(mb_substr($newWord, 0, 1)) . mb_substr($newWord, 1);
}
},
$element['NAME']
);
// Обновляем элемент, если имя изменилось
if ($newName !== $element['NAME']) {
$el = new CIBlockElement();
$el->Update($element['ID'], ["NAME" => $newName]);
echo "Элемент ID {$element['ID']} переименован в '{$newName}'<br>";
}
}
}
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_after.php");
?>
Разбор кода
Если вам необходимо в кратчайшие сроки скорректировать названия большого количества товаров в каталоге, скрипт выше станет отличным инструментом. Он позволяет не только заменить слово во всех именах элементов, но и корректно сохранить регистры букв, чтобы новые названия выглядели аккуратно и соответствовали правилам русского языка (или любого другого, на котором вы работаете).
Как работает скрипт
- Подключение ядра 1С-Битрикс
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
Данный участок кода позволяет подключить необходимые модули CMS 1С-Битрикс. После этого мы можем использовать классы и методы, связанные с работой инфоблоков.
- Проверка и подключение модуля `iblock`
if (CModule::IncludeModule("iblock")) { // Ваш код для работы с инфоблоком }
Модуль `iblock` является одним из ключевых в 1С-Битрикс, так как именно через него осуществляется работа с инфоблоками — хранилищами структурированных данных (товаров, новостей, статей и т. д.). Чтобы иметь доступ ко всем функциям и методам работы с элементами и разделами инфоблоков, необходимо проверить наличие и подключить этот модуль. Если модуль не подключён, то соответствующие классы и методы (такие как `CIBlockElement`) будут недоступны, и дальнейший код не сможет корректно выполняться.
- Определение параметров скрипта
$iblockId = 2; // ID инфоблока $searchString = "штаны"; $replaceString = "брюки";
$iblockId
– идентификатор инфоблока, в котором мы собираемся менять названия.$searchString
– слово или фраза, которые необходимо найти в названии.$replaceString
– слово или фраза, на которые будет произведена замена.
- Формируем фильтр для выборки элементов
$arFilter = [ "IBLOCK_ID" => $iblockId, "ACTIVE" => "Y", "%NAME" => $searchString ];
В массиве фильтра указываем:
IBLOCK_ID
– нужный инфоблок.ACTIVE => "Y"
– выбираем только активные элементы."%NAME" => $searchString
– ищем совпадения в названии элементов по подстроке$searchString
.
- Получаем список элементов
$elements = CIBlockElement::GetList([], $arFilter, false, false, ["ID", "NAME"]);
Функция
CIBlockElement::GetList
возвращает список элементов, подходящих под заданный фильтр. Второй параметр – сам$arFilter
, остальные используются для сортировки и постраничной навигации (здесь не применяются). - Перебираем каждый элемент и определяем новое имя
while ($element = $elements->GetNext()) { $newName = preg_replace_callback( "/\b($searchString)\b/iu", function ($matches) use ($replaceString) { ... }, $element['NAME'] ); ... }
preg_replace_callback
позволяет использовать анонимную функцию для тонкой настройки замены.- Регулярное выражение
/\b($searchString)\b/iu
означает: \b
– граница слова (чтобы заменить только целое слово, а не его часть).$searchString
– наша искомая строка.u
– указывает, что мы работаем в юникод-режиме, корректно обрабатывая различные языки.i
– регистр не учитывается при поиске (нужно, чтобы находить все варианты слова, но при этом сохранить исходные регистры в дальнейшей логике).
- Сохранение регистра символов
Внутри анонимной функции проверяется, каким образом записано исходное слово – все буквы заглавные, все строчные или только первая буква заглавная. Затем в результате замены мы возвращаем
$replaceString
с учётом нужного регистра:// Если исходное слово полностью в верхнем регистре if (mb_strtoupper($originalWord) === $originalWord) { return mb_strtoupper($newWord); } // Если полностью в нижнем регистре elseif (mb_strtolower($originalWord) === $originalWord) { return mb_strtolower($newWord); } // Иначе меняем регистр только первой буквы else { return mb_strtoupper(mb_substr($newWord, 0, 1)) . mb_substr($newWord, 1); }
Таким образом, если в названии были слова «ШТАНЫ» или «штаны», они станут «БРЮКИ» или «брюки» соответственно. Если же встречается «Штаны» с заглавной первой буквой, оно превратится в «Брюки».
- Обновление элемента
if ($newName !== $element['NAME']) { $el = new CIBlockElement(); $el->Update($element['ID'], ["NAME" => $newName]); echo "Элемент ID {$element['ID']} переименован в '{$newName}'<br>"; }
Проверяем, действительно ли произошло изменение названия. Если да, то метод
Update
классаCIBlockElement
перезаписывает полеNAME
элемента на новое. - Завершающая часть
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_after.php");
Подключение
prolog_after.php
завершает работу скрипта в контексте ядра 1С-Битрикс.
Результат до

Результат после

Заключение
Этот скрипт станет удобным решением, если вам необходимо:
- Быстро изменить названия большого количества товаров или других сущностей в инфоблоке.
- Гарантировать сохранение регистра символов для корректного отображения текстов.
- Упростить рутинный процесс переименования в больших каталогах 1С-Битрикс.
Не забудьте сделать резервную копию базы данных или тестово запустить скрипт на несколько элементов, прежде чем переименовывать весь каталог массово. Правильная подготовка и тестирование помогут избежать случайных ошибок и продлят жизнь вашему проекту на 1С-Битрикс.