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 5

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

вам поможет порядок сортировки.

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 l1key
      Может кто подскажет, как сортировать товары в зависимости от наличия, в шаблоне Luxury эта функция была реализована на фильтре, но от него пришлось отказаться из-за того что  не фильтровал по опциям.
      Перешли на oCfilter и потеряли сортировку .. теперь в каталоге каша ..
       
    • By Exploits
      777.00 руб
      Скачать/Купить дополнение


      Easyphoto - загрузка всех фото в один клик прямо с ПК + сортировка перетаскиванием + поворот фото
      Easyphoto - простая мультизагрузка фото в один клик + сортировка перетягиванием!
      Модуль работает на всех версиях и сборках (1.х - 3.х) 
      Все мы знаем что наполнять интернет магазин на Opencart крайне неудобно из-за добавления фото. Сначала в менеджер изображений, потом поиск среди файлов и выбор - все это только для одного изображения. А если изображений 10 20...? o_O
      В хороших качественных магазинах чем больше фото тем лучше для покупателя, соответственно вам будет с чем работать. Это модуль и упрощает.
      Модуль easyphoto позволяет загружать фото минуя файл менеджер прямо с компьютера всего лишь нажав одну кнопку и выбрав все файлы. (Также можно просто перетянуть в браузер). Сортировка происходит перетаскиванием фото мышкой.
       
      Особенности модуля Easyphoto
      Мультизагрузка фото в 1-2 клика прямо с компьютера минуя стандартный файл менеджер Очень удобный и понятный интерфейс - Поле выбора/перетягивания фото, поле главного изображения, поле дополнительных фото и поле корзина. new! Возможность загрузки перетягиванием в браузер Drad&Drop Есть возможность назначить папку загрузки. А конечные фото загружаются в папку с id товара - что очень удобно и логично. Файлы находятся по адресу image/catalog/easyphoto/123/… Где easyphoto - это папка, которую можно настроить для загрузки, 123 - id товара, в эту папку и кладутся все картинки. Автоматическое SEO название фото - транслитерация от названия товара. Язык можно выбрать в настройках. Например товар Принтер Canon-ip2900 будет иметь названия фото printer-canon-ip-2900-1.jpg, printer-canon-ip-2900-2.jpg, printer-canon-ip-2900-3.jpg то очень полезно для СЕО. Все спецсимволы и лишние знаки обрезаются. В версии 3.0 идет полная очистка от ненужного. Конечно, это можно настроить, но лучше что бы название было от названия товара. Есть возможность указать разделитель между названием фото и порядковым номером. Можно выбрать любое поле в товаре с которого будет генерация название изображения. Назначение главного фото идет простым перетягиванием мышки. Загрузили все фото - перетянули на главное одно из них и все готово. new! Если настроить автовыбор первого фото из всех загруженный - главное фото будет назначаться автоматически. Есть возможность добавлять фото из ранее загруженных. В версии 3.0 добавилась кнопка выбора фото с файл менеджера, и также в 1 клик. new! Сортировка загруженных фото перетягиванием мышки. Также в новой версии появилась корзина. Это необходимый инструмент облегчает работу с фотографиями товара. Когда вы загрузили все картинки, выбрали главную, отсортировали, повернули и т.п. и некоторые фото оказались не нужными - вы их просто перетягиваете в корзину. Файл все еще остается на сервере, но не привязан к товару. А с корзины его можно восстановить или удалить навсегда. Есть конечно-же инструмент полной очистки корзины. new! При наведении на изображение есть возможность увеличить фото new!  сменить на другое а также повернуть по часовой стрелке или против. При прокручивании - оригинал остается и его можно вернуть на сайт. Все очень удобно и продумано. В корзине же, можно удалить фото с сервера навсегда. Модуль создает свою вкладку в форме редактирования товара, где и располагается интерфейс работы с фото. Easyphoto не заменяет файлы магазина и не затрагивает работу сайта, только в админке. Присутствует локализация на русский и английский языки Настройки модуля
      Статус - собственно сам статус модуля. Если модуль установлен, но выключен - при редактировании товара все же будет вкладка Easyphoto, но будет выведено уведомление что для работы модуля необходимо его включить. При этом вкладка Изображения остается и фото можно добавлять стандартным способом. Папка для фото - название папки в которую будут загружаться фото. Обязательным требованием будет название на латинице например (easyphoto, photo, product_photo) без слешей, пробелов и другого лишнего и в нижнем регистре. По умолчанию если не настраивать папка будет easyphoto. Обратите внимание конечная папка для фото будет такой image/catalog/easyphoto/3634/. Где easyphoto - это папка, 3634 - id товара в ней уже и будут фото Разделитель для фото - это символ который разделяет название изображения и его порядковый номер. Допускаются нормальные символы, но не допускаются слеш / Назначать первое фото главным - настройка позволяет автоматически выбирать главным первое фото. Это очень удобно т.к. система автоматически проставляет главное изображение, и каждый раз нет необходимости его выбирать. Хотя для выбора главное достаточно просто навести курсор на фото и кликнуть по зеленой галочке Название фото из названия товара - автоматическое переименование фото в название товара. Это очень полезно для СЕО. Google рекомендует задавать название осознанным то есть отвечающим содержимому файла. Например ели поставить эту галочку, изображения для товара будут в формате nazvanie_tovara.1.jpg, nazvanie_tovara.2.jpg, nazvanie_tovara.3.jpg и т.д. Конечно, все лишние символы в названии товара будут очищаться. Рекомендуется включать эту опцию. Для новых товаров модуль также понимает где взять название. Название из. Эта настройка позволяет выбрать с какого поля брать текст для генерации названия фото. Можно поставить название, артикул, mpn и т.д. Язык названия фото - если у вас мультиязычный магазин, можно выбрать из какого языка брать название для изображений. По умолчанию берется из языка с id = 1 Как установить Easyphoto
      Автоматически через админку (рекомендуется)
      Переходим в установку модулей - выбираем файл модуля easyphoto_2.3.ocmod.zip После установки обновляем кеш модификаторов Переходим в модули - устанавливаем Easyphoto Ожидаем уведомление на почту об активации модуля Заходим в Easyphoto и настраиваем модуль Вручную с загрузкой по ftp
      Загружаем все из папки upload этого архива Переходим в установку модулей - выбираем файл модуля easyphoto_2.3.ocmod.xml После установки обновляем кеш модификаторов Переходим в модули - устанавливаем Easyphoto Ожидаем уведомление на почту об активации модуля Заходим в Easyphoto и настраиваем модуль  
      Полная информация о модуле https://microdata.pro/opencart-dev/easyphoto
      Информация об новой версии 3.1 https://microdata.pro/opencart-dev/easyphoto-3-0
      Добавил Exploits Добавлено 29.09.2016 Категория Редакторы Системные требования Метод активации Автоматическая активация Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1 ocStore 3.0
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Обращение к серверу разработчика Да Старая цена 0  
    • By Demanoco
      Здравствуйте, хочу сделать в магазин, переключение сортировки не по выбору из списка "сортировка по возрастанию цены","сортировка по убыванию цены","по названию А-Я","по названию Я-А","по рейтингу макс-мин" "по рейтингу мин-макс", а чтобы это происходило по клику на текст "сортировка по цене",а ней переключение между ("сортировка по возрастанию цены","сортировка по убыванию цены"), остальные аналогично.
      я так понимаю это надо в контролере что-то делать? подскажите пожалуйста
    • By SirGrey
      450.00 руб
      Скачать/Купить дополнение


      Сортировка значений опции в товаре
      В OpenCart из коробки можно задать порядок значений в опции.
      Но бывает необходимость настроить сортировку значений опций для каждого товара отдельно.
       
      Как пример если вы используете опцию как ссылку на товар и автовыбор первого значения опции.
      Выбранные значения могут не совпадать с товаром. (цвет, размер и т.д.)
       
      Таким значениям теперь можно указать чтобы они были первыми в списке.
      Добавил SirGrey Добавлено 23.04.2020 Категория Опции Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0 ocStore 3.0 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет Старая цена 0  
    • By SirGrey
      В OpenCart из коробки можно задать порядок значений в опции.
      Но бывает необходимость настроить сортировку значений опций для каждого товара отдельно.
       
      Как пример если вы используете опцию как ссылку на товар и автовыбор первого значения опции.
      Выбранные значения могут не совпадать с товаром. (цвет, размер и т.д.)
       
      Таким значениям теперь можно указать чтобы они были первыми в списке.
  • 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.