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

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


alkokoal

Recommended Posts

Добрый день. Установила 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

 

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

 

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

 

Надіслати
Поділитися на інших сайтах


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) ошибка никуда не пропадет, значит причина не в модулях - вспоминать, что еще делали

Надіслати
Поділитися на інших сайтах

  • 5 months later...

Недавно сам столкнулся с такой ошибкой, все оказалось просто, это ошибка в движке 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 користувачів

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

Important Information

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