Перейти к содержанию
legioner26

Скрипт миграции баз ИМ с одной в другую

Рекомендуемые сообщения

Выкладываю пример кода по миграции баз для OC может кому пригодится.

set_time_limit(15000);
/* База куда мигрируем */
$connection = new mysqli("localhost", "логин", "пароль", "имя базы №1")
or die("Нет соединения: " . mysql_error());
print ("Удачно соединено");
$connection->set_charset("utf8");
/* база донор */
$connection1 = new mysqli("localhost", "логин", "пароль", "имя базы №2")
or die("Нет соединения: " . mysql_error());
print ("Удачно соединено");
$connection1->set_charset("utf8");
$getP1 = getProductDescription1($connection1);
$path = __DIR__ .'/image/'; 
foreach ($getP1 as $getP1_n) {
	
		$getPr = getProducts($connection, $getP1_n[1]);
		if ( empty ($getPr)){
			file_put_contents($path.$getP1_n[11],file_get_contents('http://домен с которого копируем картинки с товаров/image/'.$getP1_n[11])); 
		setProducts($connection, $getP1_n[1], $getP1_n[11], $getP1_n[14]);	
		$product_id = $connection->insert_id;
		setProductDescription($connection, $product_id, $getP1_n[33], $getP1_n[34]);
		setProductToStore($connection, $product_id);
		setProductToLayout($connection, $product_id);
		if ($getP1_n[48]=='Уличные'){
			$category_id = '1131';
			setNewProductToCategory($connection, $product_id, $category_id);
			}
		elseif ($getP1_n[48]=='Промышленные') {
			$category_id = '1130';
			setNewProductToCategory($connection, $product_id, $category_id);
		}
		elseif ($getP1_n[48]=='Армстронг-панели') {
			$category_id = '1129';
			setNewProductToCategory($connection, $product_id, $category_id);
			}
	
	
	
		
	
		}else {
			
			/* В случае если присутствует одинаковая модель добавляем к имени модели к примеру (-n) */
			setProducts($connection, $getP1_n[1].'-n', $getP1_n[11], $getP1_n[14]);	
		$product_id = $connection->insert_id;
		setProductDescription($connection, $product_id, $getP1_n[33], $getP1_n[34]);
		setProductToStore($connection, $product_id);
		setProductToLayout($connection, $product_id);
		if ($getP1_n[48]=='Уличные'){
			$category_id = '1131';
			setNewProductToCategory($connection, $product_id, $category_id);
			}
		elseif ($getP1_n[48]=='Промышленные') {
			$category_id = '1130';
			setNewProductToCategory($connection, $product_id, $category_id);
		}
		elseif ($getP1_n[48]=='Армстронг-панели') {
			$category_id = '1129';
			setNewProductToCategory($connection, $product_id, $category_id);
			}
			
			/* В случае если при миграции пошли ошибки очищаем все связанные таблицы из БД */
			/*delete1($connection, $getPr['product_id']);
			delete2($connection, $getPr['product_id']);
			delete3($connection, $getPr['product_id']);
			delete4($connection, $getPr['product_id']);
			delete5($connection, $getPr['product_id']);
				*/
			
		
		
		
		}
      
		
}
function getProducts($connection, $model) {
        $sql = ("SELECT * FROM `oc_product` WHERE `model` = '" . $model . "'");
		$query = $connection->query($sql);
        while ($rows = mysqli_fetch_assoc($query)) {
            $item = $rows;
        }

        return $item;
    }

function getProductDescription1($connection1){
$sql = "SELECT * FROM `oc_product` p LEFT JOIN oc_product_description p2s ON (p.product_id = p2s.product_id) LEFT JOIN oc_product_to_category p3s ON (p.product_id = p3s.product_id) LEFT JOIN oc_category_description p4s ON (p3s.category_id = p4s.category_id) WHERE p.manufacturer_id = '31'";
$query = $connection1->query($sql);
    while ($rows = mysqli_fetch_row($query)){
            $item[] = $rows;
    }
return $item;
}

function delete1($connection, $product_id) {
        $sql = "DELETE FROM `oc_product_description` WHERE `product_id` = '". (int)$product_id ."'";
        $query = $connection->query($sql);
    }
	function delete2($connection, $product_id) {
        $sql = "DELETE FROM `oc_product_to_store` WHERE `product_id` = '". (int)$product_id ."'";
        $query = $connection->query($sql);
    }
	function delete3($connection, $product_id) {
        $sql = "DELETE FROM `oc_product_to_layout` WHERE `product_id` = '". (int)$product_id ."'";
        $query = $connection->query($sql);
    }
	function delete4($connection, $product_id) {
        $sql = "DELETE FROM `oc_product_to_category` WHERE `product_id` = '". (int)$product_id ."'";
        $query = $connection->query($sql);
    }
	function delete5($connection, $product_id) {
        $sql = "DELETE FROM `oc_product` WHERE `product_id` = '". (int)$product_id ."'";
        $query = $connection->query($sql);
    }
function setUpdateProductsToManufactur($connection, $product_id) {
        $sql = "UPDATE `oc_product` SET `manufacturer_id`='30' WHERE `product_id`= '". (int)$product_id ."'";
        $query = $connection->query($sql);
    }
function setProducts($connection, $model, $image, $price) {
        $sql = "INSERT INTO `oc_product` SET model = '" . $model . "', sku = '', upc = '', ean = '', jan = '', isbn = '', mpn = '', location = '', quantity = '100', minimum = '1', subtract = '0', stock_status_id = '7', date_available = '" . date("Y-m-d") . "', image = '" . $image . "',manufacturer_id = '30', shipping = '1', price = '" . $price . "', points = '0', weight = '0.00000000', weight_class_id = '1', length = '0.00000000', width = '0.00000000', height = '0.00000000', length_class_id = '1', status = '1', tax_class_id = '0', sort_order = '1', date_added = NOW()";
        
		$query = $connection->query($sql);
    }
function setNewProductToCategory($connection, $product_id, $category_id) {
        $sql = "INSERT INTO `oc_product_to_category` SET category_id = '" . (int) $category_id . "', product_id = '" . (int) $product_id . "'";
        $query = $connection->query($sql);
    }	

function setProductDescription($connection, $product_id, $name, $description) {
        $sql  = "INSERT INTO `oc_product_description` SET `product_id`='". (int)$product_id ."', language_id = '2',`name` ='". $name ."', `description` ='". $description ."', meta_title = '". $name ."', meta_description = '". $name ."', meta_keyword = '". $name ."',custom_alt = '', custom_h1 = '', custom_h2 = '', custom_imgtitle = '', custom_title = ''";
        $query = $connection->query($sql);
    }
function setProductToStore($connection, $product_id) {
        $sql = "INSERT INTO `oc_product_to_store` SET product_id = '" . (int) $product_id . "', store_id = '0'";
        $query = $connection->query($sql);
    }

function setProductToLayout($connection, $product_id) {
        $sql = "INSERT INTO `oc_product_to_layout` SET product_id = '" . (int) $product_id . "', store_id = '0', layout_id = '0'";
        $query = $connection->query($sql);
    }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо уточнить, что этот код непригоден для тупого копипаста, а только пример, который обязательно нуждается в допиле перед использованием!

 

А нуждается в допиле вот почему:

1. Захардкодено в запросах вставки: store_id = '0', layout_id = '0', language_id = '2', manufacturer_id='30', а также многие свойства товара (sku, quantity, stock_status_id, weight, status и другие).

2. Присутствуют нестандартные поля, которые будут вызывать ошибки: custom_alt, custom_h1, custom_h2, custom_imgtitle, custom_title.

3. Присутствуют подобные блоки кода:

if ($getP1_n[48]=='Уличные'){
	$category_id = '1131';
	setNewProductToCategory($connection, $product_id, $category_id);
}

Которые имеют смысл только для ТС, а в других магазинах могут привести к непредсказуемой путанице с категориями.

 

P.S. Качество кода сознательно не комментирую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скрипт был написан под скорую руку по заливке некоторых категорий с ИМ. Естественно, что его необходимо оптимизировать под свои нужды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну по хорошему конечно необходимо создать класс со своими методами. А в исполняемом передавать то что необходимо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если кому интересно и не понятно, могу объяснить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.