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

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

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

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

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


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


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

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


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




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) ?

Изменено пользователем rsavchak

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


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

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

$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. Перед применением сделайте бекап БД.

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


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

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



$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

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


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


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

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

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


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

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

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

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


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

 

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





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

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

Изменено пользователем rsavchak

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


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

это понятно. результат покажите

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


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

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

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

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

 

 а выполните 

desc product_attribute

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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