1с-Битрикс управление сайтом
Продление лицензий 1С-Битрикс: Управление сайтом
У нас вы можете приобрести продукты и продления лицензий 1С-Битрикс без наценок и бюрократии.
Битрикс24
Продление лицензий Битрикс24
У нас вы можете приобрести продукты и продления лицензий Битрикс24 без наценок и бюрократии.
Назад

Как перенести базу товаров в Битрикс со старого сайта

Как
Главная
Блог
Как перенести базу товаров в Битрикс со старого сайта

Миграция данных со старого сайта на новую платформу — важный этап при переходе на Битрикс. Особенно это касается каталога товаров, ведь ошибки при переносе могут привести к потере информации, некорректному отображению цен или характеристик.

В этой статье мы разберём пошаговый процесс переноса базы товаров из MySQL в Битрикс:

  • Подключение к старой базе данных
  • Извлечение и обработка данных
  • Массовое добавление и обновление товаров через API Битрикс
  • Решение проблем с кодировкой и ошибками

Этот метод подходит для переноса данных из Joomla, WordPress, OpenCart и других CMS, где товары хранятся в MySQL.

Важно! Перед началом работы:

  • Сделайте резервную копию базы данных.

  • Проверьте структуру таблиц в старой БД.

  • Убедитесь, что в Битрикс создан инфоблок для товаров.

Теперь перейдём к практике!

1. Подключение к базе данных MySQL

Для работы с MySQL в PHP используем расширение mysqli, так как старое mysql_connect устарело.

ini_set("display_errors", 1);
error_reporting(E_ALL);

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
if (!$link) {
    die("Ошибка подключения к MySQL: " . mysqli_connect_error());
}

Почему mysqli, а не mysql?
Расширение mysql_ deprecated с PHP 5.5.0 и удалено в PHP 7.0.0.

2. Получение списка таблиц из базы данных

Чтобы понять структуру данных, сначала получим список всех таблиц:

$query = "SHOW TABLES";
$result = mysqli_query($link, $query) or die("Ошибка: " . mysqli_error($link));
$tables = [];

if ($result) {
    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        $tables[] = $row['Tables_in_site_com']; // Замените на вашу БД
    }
}

Зачем получать все таблицы?
Это помогает понять, какие данные доступны, прежде чем фильтровать нужные таблицы.

3. Проверка и настройка кодировки (UTF-8)

Во избежание проблем с кодировкой:

if (!$link->set_charset("utf8mb4")) {
    die("Ошибка кодировки: " . $link->error);
}

Почему UTF-8?
Это стандартная кодировка для корректного отображения кириллицы и спецсимволов.

4. Извлечение данных из таблиц

Перебираем таблицы и собираем данные:

foreach ($tables as $table) {
    $query = "SELECT * FROM $table";
    $result = mysqli_query($link, $query) or die("Ошибка: " . mysqli_error($link));
    
    if ($result) {
        while ($row = mysqli_fetch_assoc($result)) {
            // Обработка данных
            $products[] = $row;
        }
    }
}

mysqli_close($link); // Закрываем соединение

5. Добавление товаров в Битрикс

Используем API Битрикса для создания элементов инфоблока:

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");

$el = new CIBlockElement;

foreach ($products as $product) {
    $arFields = [
        "IBLOCK_ID"      => 18, // ID инфоблока
        "NAME"           => $product['NAME'],
        "ACTIVE"         => "Y",
        "DETAIL_TEXT"    => $product['DESCRIPTION'],
        "PROPERTY_VALUES" => [
            "COLOR"      => $product['COLOR'], // Пример свойства
            "SIZE"       => $product['SIZE'],
        ],
    ];

    if ($newId = $el->Add($arFields)) {
        echo "Добавлен товар ID: " . $newId;
    } else {
        echo "Ошибка: " . $el->LAST_ERROR;
    }
    
    unset($arFields); // Очистка памяти
}

6. Обновление существующих товаров

Если нужно обновить данные:

foreach ($products as $name => $data) {
    $res = CIBlockElement::GetList(
        [],
        ["IBLOCK_ID" => 34, "NAME" => $name],
        false,
        false,
        ["ID"]
    );
    
    if ($item = $res->GetNext()) {
        CIBlockElement::SetPropertyValuesEx($item['ID'], 34, [
            "PROP_1" => $data['value1'],
            "PROP_2" => $data['value2'],
        ]);
    } else {
        echo "Товар не найден: " . $name;
    }
}

Перенос данных требует внимательности, но с помощью этого руководства вы сможете автоматизировать процесс и избежать потерь информации.

Совет: Перед массовым импортом протестируйте скрипт на нескольких товарах.

Боитесь потерять данные или нарушить SEO-структуру?

Даже один неверный символ в запросе может "уронить" сайт. Доверьте перенос профессионалам. Мы не только аккуратно перенесем все товары из MySQL, но и сохраним их привязку к разделам и текущие URL-адреса для поисковиков.

Заказать бесплатную консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи