Делайте бекап БД, всегда делайте. Даже когда кажется, что все замечудненько, попадется модуль, который все испортит.
Но вот беда случилась, и бекап есть. Но все заливать не требуется, например похерились только определенные свойства элементов, или какая-то категория товаров. Как быть?
Прежде всего загружаете старый бекап по соседству с боевым, чтобы боевой сайт мог к нему подконнектиться. И приступаем к написанию кода перегонки данных. Каждый раз подход индивидуальный. Но вот вы накидали алгоритм по выборке данных из «старого Битрикс» и загона его в новый. Мне тут проще было оперировать запросами, поэтому пример будет с ними.
Все волшебство сводится к волшебной команде use, которую применяем два раза — при коннекте к старой базе и потом к новой.
Получается как-то так:
$arAll = array();
//коннектимся к старой базе, забираем данные так, как-будто они находятся в текущем Битрикс
$DB->Query('use db1507;');
$rs = $DB->Query('SELECT * FROM `b_iblock_element_property` WHERE `IBLOCK_PROPERTY_ID`=455;');
while ($ar = $rs->Fetch()) {
$arAll[] = $ar;//подразумеваем, что массив данных вместится в один заход
}
//возвращаемся к старой (боевой) базе
$DB->Query('use db;');
foreach ($arAll as $ar) {
//аккуратно инсертим
$DB->Query('UPDATE `b_iblock_element_property` SET `VALUE`='.$ar['VALUE'].', `VALUE_ENUM`='.$ar['VALUE_ENUM'].' WHERE `ID`='.$ar['ID'].';');
break;//при первом заходе вставляем break и проверяем правильно ли отработало, иначе винегрет еще сложнее разгребать :)
} |
Повторю, скрипт не для боевого применения, а лишь как иллюстрация действий. Ну и стиль кодирования, именования и прочего не для применения, а так как надо было ASAP.
Например надо календари, сообщения, живую ленту перегнать, а так же CRM со всеми событиями (Лиды, сделки, события, звонки)
Так же файлы
А в целом принцип тот же. Да и я просто показал коннекты между двумя базами.