Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Сопутствующие товары - как записать в базу?


Recommended Posts

Добрый вечер)

 

В общем, не пойму как записать в базу сопутствующие товары, полученные с помощью сторонней функции.

 

Начну с этого:

(трактую что ниже написано, правильно?)

Если существует  запрос добавления продукта (с админки) - то присваеваем продукт полученный с админки

иначе если существует (ранее добавленный продукт), то присваиваем продукту - продукт, полученный из базы,

иначе - продукт - это массив

 

данные по сопутствующим товарам - это массив

 

распаковываем массив...

 

Верно?

		if (isset($this->request->post['product_related'])) {
			$products = $this->request->post['product_related'];
		} elseif (isset($this->request->get['product_id'])) {
			$products = $this->model_catalog_product->getProductRelated($this->request->get['product_id']);
		} else {
			$products = array();
		}

		$data['product_relateds'] = array();

		foreach ($products as $product_id) {
			$related_info = $this->model_catalog_product->getProduct($product_id);

			if ($related_info) {
				$data['product_relateds'][] = array(
					'product_id' => $related_info['product_id'],
					'name'       => $related_info['name']
				);
			}
		}

 

Link to post
Share on other sites

Далее, в каталоге:

 

после $results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']);

 

я указал

 

                if(count($results)<6){// если уже выводятся сопуствующие, не более
                $temp = $this->model_catalog_product->getProductSimilar($this->request->get['product_id'],6);
                foreach($temp as $t){               
                 if(!empty($t)){                 
                    $results[] = $t;                
                    }        
                }        
            } 

 

временно = обращаемся к новой функции по бд

 

Затем

 

сама функция в модели

 

	public function getProductSimilar($product_id,$limit) {
		$product_data = array();
		// находим категорию, в которой нах. товар
		$category = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" .$product_id. "'");
		$category_id = $category->row['category_id'];
		// делаем выборку товаров из этой же категории, которые следуют после данного товара
		$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_category p2c  ON (p.product_id = p2c.product_id) WHERE p2c.category_id = '" . (int)$category_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_category p2c  ON (p.product_id = p2c.product_id) WHERE p2c.category_id = '" . (int)$category_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 ($sql->rows as $result) {
					$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
				}
		}

		return $product_data;
	}

 

Link to post
Share on other sites

Вот и хотелось бы - полученный в новой функции из модели результат - записать в таблицу. Чтобы каждый раз не выполнять запросы к БД.

 

Можно так сделать?

 

Хотелось бы записать и при добавлении новых товаров - перезаписывать данные в таблице по сопутствующим товарам.

Link to post
Share on other sites

В общем, нужен генератор сопутствующих товаров по принципу: товары из той же категории, закольцованные по кругу.

 

Кажется, кэш поможет. Чтобы каждый раз не генерировались налету.

Link to post
Share on other sites

Возникла ещё идея: записать в БД из catalog/model/catalog/product

 

Так можно сделать? Прямо в функции:

 

public function getProductSimilar($product_id,$limit) {
		$product_data = array();
		// находим категорию, в которой нах. товар
		$category = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" .$product_id. "'");
		$category_id = $category->row['category_id'];
		// делаем выборку товаров из этой же категории, которые следуют после данного товара
		$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_category p2c  ON (p.product_id = p2c.product_id) WHERE p2c.category_id = '" . (int)$category_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_category p2c  ON (p.product_id = p2c.product_id) WHERE p2c.category_id = '" . (int)$category_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 ($sql->rows as $result) {
					$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
				}
		}

		return $product_data;
	}

 

 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

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.