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

[Решено?..] Ошибка при копировании товара

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

Добрый день. Установила vqmod для версии 1.5.5. Добавила пару модулей, (категории и новости). Теперь при копировании товаров в админке выскакивает такая ошибка

 

Warning: Illegal string offset 'layout_id' in /home/g/goloviwp/animeonly.ru/public_html/vqmod/vqcache/vq2-admin_model_catalog_product.php on line 113Warning: Illegal string offset 'layout_id' in /home/g/goloviwp/animeonly.ru/public_html/vqmod/vqcache/vq2-admin_model_catalog_product.php on line 114Warning: Cannot modify header information - headers already sent by (output started at /home/g/goloviwp/animeonly.ru/public_html/admin/index.php:86) in /home/g/goloviwp/animeonly.ru/public_html/vqmod/vqcache/vq2-system_engine_controller.php on line 28Warning: Cannot modify header information - headers already sent by (output started at /home/g/goloviwp/animeonly.ru/public_html/admin/index.php:86) in /home/g/goloviwp/animeonly.ru/public_html/vqmod/vqcache/vq2-system_engine_controller.php on line 29

 

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

 

Очень не хочется эти модули удалять, нравятся мне они. Подскажите какой код нужно поправить, а самое главное как?

 

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


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

дык, а код показать

/vqmod/vqcache/vq2-admin_model_catalog_product.php on line 113
/vqmod/vqcache/vq2-admin_model_catalog_product.php on line 114
?

+-5-10 строк

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


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

if (isset($data['product_layout'])) {
foreach ($data['product_layout'] as $store_id => $layout) {
if ($layout['layout_id']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_layout SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout['layout_id'] . "'");
}
}
}

if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}

$this->cache->delete('product');


$this->cache->delete('seo_pro');


}

public function editProduct($product_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', ean = '" . $this->db->escape($data['ean']) . "', jan = '" . $this->db->escape($data['jan']) . "', isbn = '" . $this->db->escape($data['isbn']) . "', mpn = '" . $this->db->escape($data['mpn']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . $this->db->escape($data['tax_class_id']) . "', sort_order = '" . (int)$data['sort_order'] . "', date_modified = NOW() WHERE product_id = '" . (int)$product_id . "'");

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


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

код - тот же что и в родных файлах (если это именно код из vq2-admin_model_catalog_product.php)

пробуйте модули по очереди удалить + после каждого удаления чистить содержимое папок vqmod/vqcache и system/cache

 

варианты возможные:

1) конфликтует один из модулей (ну, или оба)

2) модули конфликтуют между собой

3) ошибка никуда не пропадет, значит причина не в модулях - вспоминать, что еще делали

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


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

ни чего не помогло, пришлось переустанавливать.

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


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

Недавно сам столкнулся с такой ошибкой, все оказалось просто, это ошибка в движке Opencart.
 
Стоит нам взглянуть на функцию getProductLayouts в admin/model/catalog/product.php и как в ней формируется массив, то станет понятно, что индекса 'layout_id' там нет

	public function getProductLayouts($product_id) {
		$product_layout_data = array();
		
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$product_id . "'");
		
		foreach ($query->rows as $result) {
			$product_layout_data[$result['store_id']] = $result['layout_id'];
		}
		
		return $product_layout_data;
	}

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

		if (isset($data['product_layout'])) {
			foreach ($data['product_layout'] as $store_id => $layout) {
				if ($layout['layout_id']) {
					$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_layout SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout['layout_id'] . "'");
				}
			}
		}

то есть нужно его удалить

		if (isset($data['product_layout'])) {
			foreach ($data['product_layout'] as $store_id => $layout) {
				if ($layout) {
					$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_layout SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout . "'");
				}
			}
		}

Еще момент на PHP версии 5.3 ошибки не возникает, но на версиях выше она появляется :ugeek:

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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