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

[Решено] Модуль похожие товары


Recommended Posts

Всем доброго времени суток!

 

Недавно познакомился с Opencart 3. 

Пытаюсь написать модуль, для страницы карточка товара, который будет выводить похожие товары по следующим параметрам: SKU, Price

Написал функцию в model_catalog_product:

	public function getProductSimilar($product_id) {
		
		$product_sku_data = array();

		if ($product_id) {
			
			$query = $this->db->query("SELECT product_id FROM " . DB_PREFIX . "product WHERE price > 0 AND product_id != '" . (int)$product_id . "' AND sku = (SELECT DISTINCT sku FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "') AND price < (SELECT DISTINCT price FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "') ORDER BY price");

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

		return $product_sku_data;

	}

Для реализации решил использовать встроенный модуль special

Переписал контроллер catalog_controller_extension_module_special:

<?php
class ControllerExtensionModuleSpecial extends Controller {
	public function index($setting) {
		$this->load->language('extension/module/special');

		$this->load->model('catalog/product');

		$this->load->model('tool/image');

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

		$product_id = isset($this->request->get['product_id']) ? $this->request->get['product_id'] : 0;

		$results = $this->model_catalog_product->getProductSimilar($product_id);

		foreach ($results as $result) {
			if ($result['image']) {
				$image = $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height']);
			} else {
				$image = false;
			}

			if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
				$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
			} else {
				$price = false;
			}

			if ((float)$result['special']) {
				$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
			} else {
				$special = false;
			}

			if ($this->config->get('config_review_status')) {
				$rating = $result['rating'];
			} else {
				$rating = false;
			}

			$this->data['products'][] = array(
				'product_id' => $result['product_id'],
				'thumb'   	 => $image,
				'name'    	 => $result['name'],
				'price'   	 => $price,
				'special' 	 => $special,
				'rating'     => $rating,
				'reviews'    => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
				'href'    	 => $this->url->link('product/product', 'product_id=' . $result['product_id']),
			);
		}


		return $this->load->view('extension/module/special', $data);
	}
}

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

 

Пожалуйста, подскажите, что не так я делаю?

 

Заранее огромное спасибо!

Змінено користувачем kimxan123
Надіслати
Поділитися на інших сайтах


Здравствуйте, а не намудрили ли Вы с подзапросами, любезнейший ?

сделайте пожалуйста след. реккомендацию:

$sql = "SELECT product_id FROM " . DB_PREFIX . "product WHERE price > 0 AND product_id != '" . (int)$product_id . "' AND sku = (SELECT DISTINCT sku FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "') AND price < (SELECT DISTINCT price FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "') ORDER BY price";
$this->log->write('sql_req:'.$sql);
$query = $this->db->query($sql);

и просмотрите в журнале, что покажет строка sql_req

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

15 минут назад, auditor сказал:

Здравствуйте, а не намудрили ли Вы с подзапросами, любезнейший ?

сделайте пожалуйста след. реккомендацию:


$sql = "SELECT product_id FROM " . DB_PREFIX . "product WHERE price > 0 AND product_id != '" . (int)$product_id . "' AND sku = (SELECT DISTINCT sku FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "') AND price < (SELECT DISTINCT price FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "') ORDER BY price";
$this->log->write('sql_req:'.$sql);
$query = $this->db->query($sql);

и просмотрите в журнале, что покажет строка sql_req

 

 

Последовал вашим рекомендациям

public function getProductSimilar($product_id) {
		
		$product_sku_data = array();
		
		$sql = "SELECT product_id FROM " . DB_PREFIX . "product WHERE price > 0 AND product_id != '" . (int)$product_id . "' AND sku = (SELECT DISTINCT sku FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "') AND price < (SELECT DISTINCT price FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "') ORDER BY price";
		$this->log->write('sql_req:'.$sql);
		$query = $this->db->query($sql);
		foreach ($query->rows as $result) {
			$product_sku_data[$result['product_id']] = $this->getProduct($result['product_id']);
		}

		return $product_sku_data;

	}

Снова почистил весь кеш

Положительных результатов нет.

Журнал пуст

1.jpg

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


ну вы сделали запрос выведите его в дамп - посмотрите что внутри и так далее

потом вызвали его в контроллере и посмотрите что пришло 

 

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


6 минут назад, prived сказал:

ну вы сделали запрос выведите его в дамп - посмотрите что внутри и так далее

потом вызвали его в контроллере и посмотрите что пришло 

 

 

Данный запрос работает на прямую в базу, на примере определенного product_id.

 

Этого разве не достаточно?

2.jpg

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


3 минуты назад, kimxan123 сказал:

Этого разве не достаточно?

если не сработала запись в лог

$this->log->write('sql_req:'.$sql);


значит не было вызова данного метода getProductSimilar

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


Проверил, подзапросы возвращают правильный ответ, все нормально, не намудрили, напишите в ЛС (если есть тимвъювер, то сразу айди с паролем), разберём ситуейшн, при условии, что отпишите результат - тут.

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

9 минут назад, auditor сказал:

Проверил, подзапросы возвращают правильный ответ, все нормально, не намудрили, напишите в ЛС (если есть тимвъювер, то сразу айди с паролем), разберём ситуейшн, при условии, что отпишите результат - тут.

Написал в лс

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


Все решено. Большое спасибо @ auditorНавёл на ошибку.

Всё-таки проблема с модификаторами. Так что дорогие друзья, чистим модификаторы))))

 

 

Всем спасибо за внимание!

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


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

×
×
  • Створити...

Important Information

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