Jump to content
Sign in to follow this  
FosFer

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

Recommended Posts

Добрый день!

 

Прошу вашей помощи. Установил модуль Серии 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>

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

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

Share this post


Link to post
Share on other sites

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

если вы заглянете в 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'];

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

		$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']);

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

Share this post


Link to post
Share on other sites


        $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;

Share this post


Link to post
Share on other sites

Большое спасибо, товарищу 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

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
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.