Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


legioner26

Recommended Posts

Выкладываю пример кода по миграции баз для 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.