Массовое переименование товаров каталога, с сохранением регистра

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Массовое переименование товаров каталога, с сохранением регистра
Как массово переименовать товары (элементы) в 1С-Битрикс, сохранив регистр символов. Разбор кода

В последнее время многие владельцы интернет-магазинов, работающих на CMS  1С-Битрикс, сталкиваются с необходимостью массового переименования  товаров. Причины могут быть самые разные: от ребрендинга до  корректировки наименований в соответствии с SEO-требованиями. Однако при  переименовании важно сохранить регистр символов: заглавные буквы должны  остаться заглавными, а строчные – строчными. Ниже приведён рабочий  скрипт на PHP, который решает эту задачу автоматизированно и безопасно.
Этот скрипт одновременно заменяет несколько слов (например, «кроссовки», «футболка», «джинсы») на новые варианты («кеды», «топ», «джинсовка») в названиях товаров, корректно сохраняя регистр каждого слова (например, «Футболка» → «Топ», «ДЖИНСЫ» → «ДЖИНСОВКА»), при этом затрагивая только целые слова, а не их части.
Код
<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

use Bitrix\Iblock\ElementTable;

if (CModule::IncludeModule("iblock")) {
    $iblockId = 2; // ID инфоблока с товарами
    $replacements = [
        "кроссовки" => "кеды",
        "футболка"  => "топ",
        "джинсы"    => "джинсовка"
    ];

    $arFilter = [
        "IBLOCK_ID" => $iblockId,
        "ACTIVE"    => "Y",
        "NAME"      => array_keys($replacements) // Поиск по любому из ключевых слов
    ];

    $elements = CIBlockElement::GetList(
        [], 
        $arFilter, 
        false, 
        false, 
        ["ID", "NAME"]
    );

    while ($element = $elements->GetNext()) {
        $newName = $element['NAME'];

        foreach ($replacements as $search => $replace) {
            // Проверяем, есть ли целое слово для замены (с учётом границ слова и регистра)
            $pattern = '/(?<=^|\P{L})' . preg_quote($search, '/') . '(?=\P{L}|$)/ui';

            $newName = preg_replace_callback($pattern, function($matches) use ($replace, $search) {
                $original = $matches[0];

                if (mb_strtoupper($original, 'UTF-8') === $original) {
                    return mb_strtoupper($replace, 'UTF-8');
                } elseif (mb_strtolower($original, 'UTF-8') === $original) {
                    return mb_strtolower($replace, 'UTF-8');
                } else {
                    return mb_strtoupper(mb_substr($replace, 0, 1), 'UTF-8') . mb_substr($replace, 1);
                }
            }, $newName);
        }

        if ($newName !== $element['NAME']) {
            CIBlockElement::SetPropertyValuesEx($element['ID'], $iblockId, []);
            $el = new CIBlockElement();
            $el->Update($element['ID'], ['NAME' => $newName]);
            echo "Обновлено: '{$element['NAME']}' → '{$newName}'<br>";
        }
    }
}

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php");
?>
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.