Jump to content
SAY

[Решено] Сортировка товаров по наличию

Recommended Posts

Доброго всем!

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

Спасибо!

Share this post


Link to post
Share on other sites

Нашел сам:

В файле:

catalog/controller/product/category.php
15ю строку:

$sort = 'p.sort_order';
заменить на:

$sort = 'p.quantity';
21ю строку:

$order = 'ASC';
заменить на:

$order = 'DESC';
  • +1 3

Share this post


Link to post
Share on other sites

А можно что бы одновременно сортировалось по дате заполнения и по наличию, что бы те товары которых нет в наличии были последними.

Share this post


Link to post
Share on other sites

решение, которое не конфликтует с filterpro

catalog\controller\product\category.php, 211-212 строки

 
'value' => 'p.sort_order-ASC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)

нужно заменить на

'value' => 'p.quantity-DESC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.quantity&order=DESC' . $url)

  • +1 1

Share this post


Link to post
Share on other sites

Может подскажете тогда как отключить повторную фильтрацию.

то есть при открытии категории сначала сам движок фильтрует, а потом filterpro.

как это вылечить?

спасибо.

а за вышесказанное спасибо.

Share this post


Link to post
Share on other sites

Нашел сам:

В файле:

catalog/controller/product/category.php

15ю строку:

$sort = 'p.sort_order';

заменить на:

$sort = 'p.quantity';

21ю строку:

$order = 'ASC';

заменить на:

$order = 'DESC';

решение, которое не конфликтует с filterpro

catalog\controller\product\category.php, 211-212 строки

'value' => 'p.sort_order-ASC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)

нужно заменить на

'value' => 'p.quantity-DESC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.quantity&order=DESC' . $url)

на 1.5.1.3 не выходит аленький цветочек =(

Share this post


Link to post
Share on other sites

А для версии 1.5.3.1 этот метод работает?

Share this post


Link to post
Share on other sites

Возможно ли доработать этот метод для сортировки по наличию акции на товары, и по наличию товаров в блоке "рекомендуем"?

Share this post


Link to post
Share on other sites

решение, которое не конфликтует с filterpro

catalog\controller\product\category.php, 211-212 строки

'value' => 'p.sort_order-ASC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)

нужно заменить на

'value' => 'p.quantity-DESC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.quantity&order=DESC' . $url)

 

работает, спасибо

Share this post


Link to post
Share on other sites

а можно ли так же отсортировать товар в похожих товарах?

т.е. в карточке товара есть таб "похожие товары", можно ли там выводить сначала товары в наличии, а потом те, которых нет?

Share this post


Link to post
Share on other sites

Я сделал это в модели. Мне надо что бы товары которых нет в наличии были внизу списка при любой сортировке.

 

catalog\model\catalog\product.php  (187 line для OpenCart 1.5.6.1)

		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.sort_order";	
		}

меняем на 

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY (p.quantity>0) DESC, LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (p.quantity>0) DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY (p.quantity>0) DESC," . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY (p.quantity>0) DESC, p.sort_order";	
		}

Так же я решил вообще не показывать в похожих продуты, которых нет в наличии. Для этого в функции getProductRelated добавляем условие: p.quantity > 0

При желании можно тоже отображать в конце по аналогии с категорией. Ну и тоже самое в бестселлерах, популярных, последних и т.п.

 

P.S. Не знаю насколько это решение правильное и красивое, но работает.

  • +1 8

Share this post


Link to post
Share on other sites

Я сделал это в модели. Мне надо что бы товары которых нет в наличии были внизу списка при любой сортировке.

 

 

При переходе на вторую страничку вся сортировка рушится Ж( Не пофиксили ?

Share this post


Link to post
Share on other sites

При переходе на вторую страничку вся сортировка рушится Ж( Не пофиксили ?

Хм, у меня не рушится.

Share this post


Link to post
Share on other sites

Я сделал это в модели. Мне надо что бы товары которых нет в наличии были внизу списка при любой сортировке.

 

catalog\model\catalog\product.php  (187 line для OpenCart 1.5.6.1)

		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.sort_order";	
		}

меняем на 

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY (p.quantity>0) DESC, LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (p.quantity>0) DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY (p.quantity>0) DESC," . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY (p.quantity>0) DESC, p.sort_order";	
		}

Так же я решил вообще не показывать в похожих продуты, которых нет в наличии. Для этого в функции getProductRelated добавляем условие: p.quantity > 0

При желании можно тоже отображать в конце по аналогии с категорией. Ну и тоже самое в бестселлерах, популярных, последних и т.п.

 

P.S. Не знаю насколько это решение правильное и красивое, но работает.

наконец рабочий вариант, который подошел и для фильтра про

Share this post


Link to post
Share on other sites

Я сделал это в модели. Мне надо что бы товары которых нет в наличии были внизу списка при любой сортировке.

 

catalog\model\catalog\product.php  (187 line для OpenCart 1.5.6.1)

		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.sort_order";	
		}

меняем на 

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY (p.quantity>0) DESC, LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (p.quantity>0) DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY (p.quantity>0) DESC," . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY (p.quantity>0) DESC, p.sort_order";	
		}

Так же я решил вообще не показывать в похожих продуты, которых нет в наличии. Для этого в функции getProductRelated добавляем условие: p.quantity > 0

При желании можно тоже отображать в конце по аналогии с категорией. Ну и тоже самое в бестселлерах, популярных, последних и т.п.

 

P.S. Не знаю насколько это решение правильное и красивое, но работает.

 

 

Спасибо. Думал сам делать, а вы уже сами :) Мысленный плюс.

Share this post


Link to post
Share on other sites

Большое спасибо - решение супер.

ocStore 1.5.5.1.1 - все работает...

Share this post


Link to post
Share on other sites

Я сделал это в модели. Мне надо что бы товары которых нет в наличии были внизу списка при любой сортировке.

 

catalog\model\catalog\product.php  (187 line для OpenCart 1.5.6.1)

		if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY " . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY p.sort_order";	
		}

меняем на 

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
				$sql .= " ORDER BY (p.quantity>0) DESC, LCASE(" . $data['sort'] . ")";
			} elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (p.quantity>0) DESC, (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			} else {
				$sql .= " ORDER BY (p.quantity>0) DESC," . $data['sort'];
			}
		} else {
			$sql .= " ORDER BY (p.quantity>0) DESC, p.sort_order";	
		}

Так же я решил вообще не показывать в похожих продуты, которых нет в наличии. Для этого в функции getProductRelated добавляем условие: p.quantity > 0

При желании можно тоже отображать в конце по аналогии с категорией. Ну и тоже самое в бестселлерах, популярных, последних и т.п.

 

P.S. Не знаю насколько это решение правильное и красивое, но работает.

Огромная благодарочка! На MaxyStore v.1.5.5.1 работает суперово!

Share this post


Link to post
Share on other sites

Может кто еще подскажет, как у этих товаров, которых нет в наличии, притемнить или обесцветить изображение. Вообще было бы отлично.

Edited by 1san4ik

Share this post


Link to post
Share on other sites

Может кто еще подскажет, как у этих товаров, которых нет в наличии, притемнить или обесцветить изображение. Вообще было бы отлично.

 

Это уже в шаблоне. Например в product.tpl если вы хотите на страничке товара это сделать. 

<?php if ($quantity==0) {echo 'ЧЕГО-НИБУДЬ-ЗАТЕМНЯЮЩЕЕ';};

Затемнить картинку можно, например, наложив сверху цветной элемент и сделав его частично прозрачным (background-color: #000; opacity: 0.8;)

Share this post


Link to post
Share on other sites

Это уже в шаблоне. Например в product.tpl если вы хотите на страничке товара это сделать. 

<?php if ($quantity==0) {echo 'ЧЕГО-НИБУДЬ-ЗАТЕМНЯЮЩЕЕ';};

Затемнить картинку можно, например, наложив сверху цветной элемент и сделав его частично прозрачным (background-color: #000; opacity: 0.8;)

Ооо, спасибо Вам за быстрый ответ! Прийду домой пошаманю)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By PaulKravchenko
      Скачать/Купить дополнение


      Сортировка модулей в схемах {Drag'n'Drop}
      Небольшое дополнение, которое позволяет менять порядок сортировки модулей в схемах их перетаскиванием.
       
      Реализация выполнена с использованием jQuery UI
       
      Добавил PaulKravchenko Добавлено 27.09.2019 Категория Прочее Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет  
    • By PaulKravchenko
      Небольшое дополнение, которое позволяет менять порядок сортировки модулей в схемах их перетаскиванием.
       
      Реализация выполнена с использованием jQuery UI
       
    • By legioner26
      Разработан модификатор с пагинацией для опций в админ панели.
      Данный модификатор предназначен для интернет магазинов с большим списком параметров в опциях, с которыми сложно работать и подгружают сайт.
      Установив модификатор Вы получите список параметров опции в превычном постраничном для Вас виде, также при удалении параметра в админ панели не надо жать на кнопку сохранить, все происходит автоматически.
      В архиве 2 папки
      ОС 2.0-2.1 - Для версий 2.0-2.1
      ОС 2.2-2.3 - Для версий 2.2-2.3
       
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кеш и обновляем.
    • By legioner26
      350.00 руб
      Скачать/Купить дополнение


      Пагинация Опций в админке для крупных ИМ
      Разработан модификатор с пагинацией для опций в админ панели.
      Данный модификатор предназначен для интернет магазинов с большим списком параметров в опциях, с которыми сложно работать и подгружают сайт.
      Установив модификатор Вы получите список параметров опции в превычном постраничном для Вас виде, также при удалении параметра в админ панели не надо жать на кнопку сохранить, все происходит автоматически.
      В архиве 2 папки
      ОС 2.0-2.1 - Для версий 2.0-2.1
      ОС 2.2-2.3 - Для версий 2.2-2.3
       
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кеш и обновляем.
      Добавил legioner26 Добавлено 16.12.2017 Категория Опции Системные требования Сайт разработчика Старая цена 600 Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Обращение к серверу разработчика  
    • By legioner26
      399.00 руб
      Скачать/Купить дополнение


      Сортировка товаров в заказе по категориям с учетом остатков
      Разработан модификатор с сортировкой товаров в заказе по категориям в админ панели, в пользовательской части, в письме заказчику и письме администратора магазина.
      Данный функционал в разы упрощает работу менеджеров в подборе номенклатуры для выставления счетов.
      Так же в админке в заказах добавлена колонка производителя, фото товара и учет остатков по складу с возможностью сохранять выбор.
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кешь и обновляем.
       
      Добавил legioner26 Добавлено 27.12.2017 Категория Покупки, оформление заказа, корзина Системные требования Сайт разработчика Старая цена 800 Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет  
  • 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.