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

Как исправить ошибку Undefined index: series_id

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

Добрый день!

 

Прошу вашей помощи. Установил модуль Серии https://opencartforum.com/topic/10535-serii/, затем установил к нему дополнение 

 

https://opencartforum.com/topic/10535-serii/?do=findComment&comment=264240

 

Суть дополнения в том, что оно дает возможность показывать на странице товара товары из определенной серии. Дополнение отлично работает, но только при условии когда серия товару назначена. Если серии у товара в админке нет, появляется ошибка:

 

Notice: Undefined index: series_id in /home/www/vqmod/vqcache/vq2-catalog_model_catalog_product.php on line 487

	<file name="catalog/model/catalog/product.php">
        <operation>
            <search position="before"><![CDATA[
	public function getProductLayoutId($product_id) {
            ]]></search>
            <add><![CDATA[
// product similar
	public function getProductSimilar($product_id,$limit) {
		$product_data = array();
		// находим категорию, в которой нах. товар
		$series = $this->db->query("SELECT series_id FROM " . DB_PREFIX . "product_to_series WHERE product_id = '" .$product_id. "'");
		$series_id = $series->row['series_id'];
		// делаем выборку товаров из этой же категории, которые следуют после данного товара
		$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_series p2c  ON (p.product_id = p2c.product_id) WHERE p2c.series_id = '" . (int)$series_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p.product_id > '" .(int)$product_id. "' ORDER BY p.product_id ASC LIMIT " .(int)$limit);

		foreach ($query->rows as $result) {
			$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
		}

		if(count($query->rows) < $limit){ // если в категории после товара меньше лимита...
			$plimit = $limit - count($query->rows); // вычисляем разницу и делаем выборку товаров с НАЧАЛА списка, кол-во = разнице
			$sql = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_series p2c  ON (p.product_id = p2c.product_id) WHERE p2c.series_id = '" . (int)$series_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p.product_id <> '" .(int)$product_id. "' ORDER BY p.product_id ASC LIMIT " .(int)$plimit);

				foreach ($sql->rows as $result) {
					$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
				}
		}

		return $product_data;
	}
// product similar
            ]]></add>
        </operation>
	</file>

Вот код, из-за которого выскакивает ошибка. 

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

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


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

потому что...

если вы заглянете в sysyte/datebase/mysql.php

и посмотрите метод query.

$query->row = isset($data[0]) ? $data[0] : array();

То, наверное, поймете, что

        $series = $this->db->query("SELECT series_id FROM " . DB_PREFIX . "product_to_series WHERE product_id = '" .$product_id. "'");
        $series_id = $series->row['series_id'];

Нужно правильно обработать.

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


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

Нужно правильно обработать.

 

Спасибо большое!

 

Но не могли бы вы подсказать как именно?

 

Я попытался сделать вот так вот: 

		$series = $this->db->query("SELECT series_id FROM " . DB_PREFIX . "product_to_series WHERE product_id = '" .$product_id. "'");
		$series_id = isset($series->row['series_id']);

Но успехом это не закончилось - ошибка исчезла, но и серии у самих товаров так же исчезли. Спасибо большое что отозвались.

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


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


        $series = $this->db->query("SELECT series_id FROM " . DB_PREFIX . "product_to_series WHERE product_id = '" .$product_id. "'");

if (  $series) {

           $series_id = $series->row['series_id'];

}

return $product_data;

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


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

Большое спасибо, товарищу chukcha.

 

Если у кого-то возникнет такая же проблема, вот решение ее:

 

Замените ваш код на этот:

// product similar
	public function getProductSimilar($product_id,$limit) {
		$product_data = array();
		// находим категорию, в которой нах. товар
		$series = $this->db->query("SELECT series_id FROM " . DB_PREFIX . "product_to_series WHERE product_id = '" .$product_id. "'");
if ( $series->row) {
		$series_id = $series->row['series_id'];
		// делаем выборку товаров из этой же категории, которые следуют после данного товара
		$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_series p2c  ON (p.product_id = p2c.product_id) WHERE p2c.series_id = '" . (int)$series_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p.product_id > '" .(int)$product_id. "' ORDER BY p.product_id ASC LIMIT " .(int)$limit);

		foreach ($query->rows as $result) {
			$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
		}

		if(count($query->rows) < $limit){ // если в категории после товара меньше лимита...
			$plimit = $limit - count($query->rows); // вычисляем разницу и делаем выборку товаров с НАЧАЛА списка, кол-во = разнице
			$sql = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_series p2c  ON (p.product_id = p2c.product_id) WHERE p2c.series_id = '" . (int)$series_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p.product_id <> '" .(int)$product_id. "' ORDER BY p.product_id ASC LIMIT " .(int)$plimit);

				foreach ($sql->rows as $result) {
					$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
				}
		}
}
		return $product_data;
	}
// product similar

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

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

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

×

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

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