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

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

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

 

Недавно познакомился с 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

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


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

возможно кеши модификаторов и тем после правок не обновили

 

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


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, AlexDW сказал:

возможно кеши модификаторов и тем после правок не обновили

 

Весь кеш почистил, но к сожалению никаких результатов

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


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

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

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

$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

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


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

ну остается 2 места

дамп results и потом посомотреть дамп data

 

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


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, kimxan123 сказал:

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

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

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


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

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


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

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

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


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, auditor сказал:

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

Написал в лс

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


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

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

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

 

 

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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

×

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

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