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

Как на встроенных модулях типа хиты продаж оставлять товары у которых количество больше 0

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

Как на встроенных модулях типа хиты продаж оставлять товары у которых количество больше 0.

То есть когда то я напродавал один товар, а сейчас он уже закончился (количество 0), по этому его нужно скрыть пока он снова не появится в наличии

Это относится к модулям акции, хиты продаж, рекомендуемые

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


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

в контроллере, выводить только если quantity > 0

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


Ссылка на сообщение
Поделиться на другие сайты
<?php
class ControllerModuleBestSeller extends Controller {
	protected function index($setting) {
		$this->language->load('module/bestseller');
 
      	$this->data['heading_title'] = $this->language->get('heading_title');
		
		$this->data['text_sale'] = $this->language->get('text_sale');
				
		$this->data['button_cart'] = $this->language->get('button_cart');
		
		$this->data['button_wishlist'] = $this->language->get('button_wishlist');
		
		$this->data['button_compare'] = $this->language->get('button_compare');
		
		$this->load->model('catalog/product');
		
		$this->load->model('tool/image');

		$this->data['products'] = array();

		$results = $this->model_catalog_product->getBestSellerProducts($setting['limit']);
		
		foreach ($results as $result) {
			if ($result['image']) {
				$image = $this->model_tool_image->resize($result['image'], $setting['image_width'], $setting['image_height']);
			} else {
				$image = false;
			}
			//this for swap image
				
				$images = $this->model_catalog_product->getProductImages($result['product_id']);

            if(isset($images[0]['image']) && !empty($images[0]['image'])){
                  $images =$images[0]['image'];
               } 
			   
				//
			
			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,
				// for swap image
					'thumb_swap'  => $this->model_tool_image->resize($images, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')), 
					//
				'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']),
			);
		}

		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/bestseller.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/module/bestseller.tpl';
		} else {
			$this->template = 'default/template/module/bestseller.tpl';
		}

		$this->render();
	}
}
?>

где именно и как прописать это???
Вот код контроллера

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


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

в контроллере, выводить только если quantity > 0

там выборка с LIMIT

 

1 минуту назад, sinco сказал:

где именно

в модели поправить

только убедится что выборка только этим модулем используется

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


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

там выборка с LIMIT

Да, верно, но я подумал что если человек задал такой вопрос то про модель будет сложно)

 

Тем более трудно представить ситуацию чтобы самые хитовые товары кончались и продавец не бежал их сам покупать) Ну в общем так чтоб самому сделать я ответил

 

Ну вот, выше все описано))

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


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

если в контроллере - обернуть $this->data['products'][] = array(

в условие

 

if ($result['quantity'] > 0) {
			$this->data['products'][] = array(
				'product_id' => $result['product_id'],
				'thumb'   	 => $image,
				// for swap image
					'thumb_swap'  => $this->model_tool_image->resize($images, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')), 
					//
				'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']),
			);
}

 

но гораздо проще в самой модели getBestSellerProducts добавить условие в выборку

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


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

трудно представить ситуацию чтобы самые хитовые товары кончались

на то они и хитовые чтоб продавались и соответственно кончались

 

не кончается то что не продается

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


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

если в контроллере - обернуть $this->data['products'][] = array(

в условие

 


if ($result['quantity'] > 0) {
			$this->data['products'][] = array(
				'product_id' => $result['product_id'],
				'thumb'   	 => $image,
				// for swap image
					'thumb_swap'  => $this->model_tool_image->resize($images, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')), 
					//
				'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']),
			);
}

 

но гораздо проще в самой модели getBestSellerProducts добавить условие в выборку


 

Отлично, помогло!
Большое спасибо!

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


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

в контроллере, выводить только если quantity > 0

 

8 минут назад, AlexDW сказал:

если в контроллере - обернуть $this->data['products'][] = array(

в условие

Единственное при таком способе нужно указывать количество(лимит) выводимых товаров больше...Иначе  при лимите скажем в 5 товаров в настройках, отсекаем 1-2 с количеством ноль и на выходе имеем не понятную картинку с тем что в настройках и что по факту)))) 

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


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

спрашивали про контроллер - про контроллер и написал ;)

проще и правильней для этого добавить условие в саму выборку модели

 

в данном случае, если речь про стандартный модуль

в файле catalog\model\catalog\product.php

в секции public function getBestSellerProducts($limit) {

после

AND p.status = '1'

добавить

AND p.quantity > '0'

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


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

да чего уж там, меняйте в tpl чепрез javascript

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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