Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

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


legioner26
 Share

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);
    }

 

Link to comment
Share on other sites

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

 

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

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. Качество кода сознательно не комментирую.

Link to comment
Share on other sites


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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.