Jump to content
Sign in to follow this  
rsavchak

Перевод атрибутов

Recommended Posts

Подскажите пожалуйста такой момент: Есть два языка (Рус, Укр.), как скопировать все атрибуты с Рус. На Укр чтобы в дальнейшем в БД перевести их на Укр язык. Или может есть решения для пакетного перевода атрибутов ?

Share this post


Link to post
Share on other sites


INSERT IGNORE INTO oc_product_attribute SELECT `product_id`, `attribute_id`, [id укр. языка], `text` FROM oc_product_attribute WHERE `language_id` = [id рус. языка]

Share this post


Link to post
Share on other sites




INSERT IGNORE INTO oc_product_attribute SELECT `product_id`, `attribute_id`, [id укр. языка], `text` FROM oc_product_attribute WHERE `language_id` = [id рус. языка]

Это я так понимаю сделать запрос к БД ?

id укр. языка и id рус. языка - как правильно вставить (значение у меня 1 и 3) ?

Edited by rsavchak

Share this post


Link to post
Share on other sites

По идее все должно было добавиться само при добавлении языка. Не знаю что у вас пошло не так. 

$from_language_id = 3; //Рус
$to_language_id = 1; //Укр

// Attribute
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "attribute_description WHERE language_id = '" . (int)$from_language_id . "'");

foreach ($query->rows as $attribute) {
	$this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "attribute_description SET attribute_id = '" . (int)$attribute['attribute_id'] . "', language_id = '" . (int)$to_language_id . "', name = '" . $this->db->escape($attribute['name']) . "'");
}

// Attribute Group
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "attribute_group_description WHERE language_id = '" . (int)$from_language_id . "'");

foreach ($query->rows as $attribute_group) {
	$this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "attribute_group_description SET attribute_group_id = '" . (int)$attribute_group['attribute_group_id'] . "', language_id = '" . (int)$to_language_id . "', name = '" . $this->db->escape($attribute_group['name']) . "'");
} 

Этот код вырезан из модели административной панели localisation/language. Перед применением сделайте бекап БД.

Share this post


Link to post
Share on other sites

По идее все должно было добавиться само при добавлении языка. Не знаю что у вас пошло не так. 



$from_language_id = 3; //Рус
$to_language_id = 1; //Укр

// Attribute
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "attribute_description WHERE language_id = '" . (int)$from_language_id . "'");

foreach ($query->rows as $attribute) {
	$this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "attribute_description SET attribute_id = '" . (int)$attribute['attribute_id'] . "', language_id = '" . (int)$to_language_id . "', name = '" . $this->db->escape($attribute['name']) . "'");
}

// Attribute Group
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "attribute_group_description WHERE language_id = '" . (int)$from_language_id . "'");

foreach ($query->rows as $attribute_group) {
	$this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "attribute_group_description SET attribute_group_id = '" . (int)$attribute_group['attribute_group_id'] . "', language_id = '" . (int)$to_language_id . "', name = '" . $this->db->escape($attribute_group['name']) . "'");
} 

Этот код вырезан из модели административной панели localisation/language. Перед применением сделайте бекап БД.

Вы меня неправильно поняли. Сами поля есть. Только я хочу все атрибуты с рус. скопировать в укр. поля. Ваш код не помог - ошибка.

SQL запрос: 

$from_language_id = 1;


Ответ MySQL:  
 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '$from_language_id = 1' at line 1

Share this post


Link to post
Share on other sites


INSERT IGNORE INTO oc_product_attribute SELECT `product_id`, `attribute_id`, [id укр. языка], `text` FROM oc_product_attribute WHERE `language_id` = [id рус. языка]

Запрос выполнил так

INSERT IGNORE INTO product_attribute SELECT `product_id`, `attribute_id`, 3 , `text` FROM product_attribute WHERE `language_id` = 1

Но пришел пустой ответ и атрибуты не скопировало. Подскажите пожалуйста что я не так сделал. Таблица у меня без префикса.

Share this post


Link to post
Share on other sites

а выполните запрос

SELECT count(*), language_id FROM product_attribute GROUP BY 2

Share this post


Link to post
Share on other sites

 

а выполните запрос





SELECT count(*), language_id FROM product_attribute GROUP BY 2

Запрос выполнил, но ничего не поменялось т.е. атрибуты не скопировались.

Edited by rsavchak

Share this post


Link to post
Share on other sites

тогда странно. этот запрос 

INSERT IGNORE INTO product_attribute SELECT `product_id`, `attribute_id`, 3 , `text` FROM product_attribute WHERE `language_id` = 1

должен был новые поля добавить

 

 а выполните 

desc product_attribute

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.