Jump to content
Sign in to follow this  
Palladin

[Решено] Проданные товары в конце списка

Recommended Posts

Здравствуйте. Как сделать так чтобы товары имеющие статус "Нет на складе" проваливались в разделе и показывались самыми последними, иными словами чтобы при просмотре пользователем каталога магазина вначале он бы видел товар "В наличии", а уже потом все остальные, а то у меня вот так получается:(

http://shop.erolife.by/Kupalniki

Share this post


Link to post
Share on other sites

Да ладно!? Неужели никто не знает как?

Share this post


Link to post
Share on other sites

Да ладно!? Неужели никто не знает как?

Или вариант такой: те, кто знает понимают, сколько это работы и не хотят бесплатно говорить :)

А вообще, на самом деле, это либо правка пары моделей и колдовство с лишними SQL-запросами и лишним скрытым полем для сортировки, либо написание модуля, либо перекраивание части магазина.

Share this post


Link to post
Share on other sites

скорее всего нужно всего лишь добавить сортировку по полю stock_status_id в таблице product, в файле catalog/model/catalog/product.php

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

Я решил проблему так:

В свойствах товара, которого нет на складе, на вкладке "Данные" есть поле "Порядок сортировки:" по умолчанию там стоит единица, ну дак если вписывать в те товары, что вышли со склада двойку, то товары, которые закончились будут отображаться последними в списке:)

P.S. топорный метод, мб ктонить сделает это автоматической функцией?

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 изменить $sort = 'p.sort_order'; изменить на p.quantity

  • +1 1

Share this post


Link to post
Share on other sites

Спасибо попробую. Но я действительно перерыл весь интернет, даже англоязычный, чтоб найти решение, но подходящего не встечал. Модуль чтоб сделать кнопку "купить" неактивной у меня стоит, их есть даже несколько разных, и платные и бесплатные. А вот сортировку по количеству где-то находил, но мне не помогло, наверное решение было для другой версии, у меня 1.5.2.1. Сейчас попробую метод который Вы посоветовали и отпишусь. А нет ли способа сделать чтоб товар которого нет в наличии снимался с витрины? Например меняя статус товара на "отключено". У меня раньше в магазине на Virtuemart эта функция была по умолчанию, так сказать из коробки, и для меня удивительно что в OpenCart этого нет, ведь проданный товар редко появляется в наличии еще раз, меняются модели, ассортимент обновляется.

Share this post


Link to post
Share on other sites

Так вот и этот способ у меня не сработал. Очень жаль. Ранее пробовал этим способом. В обоих случаях у меня просто не грузится сайт, белая страница, в логах ошибок нет. Как адаптировать это решение под версию 1.5.2.1 ?

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 найдите строки (примерно 160 строка)

   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'] . ")";
	} else {
	 $sql .= " ORDER BY " . $data['sort'];
	}
   } else {
	$sql .= " ORDER BY p.sort_order";
   }

Заменить на:

   if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
	$sort = $data['sort'];
   } else {
	$sort = 'p.sort_order';
   }
   $append_order = 'p.price = 0, p.quantity = 0,';
   if ($sort == 'pd.name' || $sort == 'p.model') {
	$sql .= " ORDER BY $append_order LCASE($sort)";
   } else {
	$sql .= " ORDER BY $append_order $sort";
   }
  • +1 3

Share this post


Link to post
Share on other sites

В файле catalogmodelcatalogproduct.php найдите строки (примерно 160 строка)

   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'] . ")";
	} else {
	 $sql .= " ORDER BY " . $data['sort'];
	}
   } else {
	$sql .= " ORDER BY p.sort_order";
   }

Заменить на:

   if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
	$sort = $data['sort'];
   } else {
	$sort = 'p.sort_order';
   }
   $append_order = 'p.price = 0, p.quantity = 0,';
   if ($sort == 'pd.name' || $sort == 'p.model') {
	$sql .= " ORDER BY $append_order LCASE($sort)";
   } else {
	$sql .= " ORDER BY $append_order $sort";
   }

на версии 3.1 не работает(

Share this post


Link to post
Share on other sites

Ошибля. Заменить надо в методе getProducts(). В 1531 это 128 строка.

  • +1 3

Share this post


Link to post
Share on other sites

Ошибля. Заменить надо в методе getProducts(). В 1531 это 128 строка.

Спасибо! в 1,5,4,1 сработало!

Share this post


Link to post
Share on other sites

Ошибля. Заменить надо в методе getProducts(). В 1531 это 128 строка.

 

 

пасибочки..на 1.5.3 все работает :eek:

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 найдите строки (примерно 160 строка)

 

   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'] . ")";
	} else {
	 $sql .= " ORDER BY " . $data['sort'];
	}
   } else {
	$sql .= " ORDER BY p.sort_order";
   }
Заменить на:

   if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
	$sort = $data['sort'];
   } else {
	$sort = 'p.sort_order';
   }
   $append_order = 'p.price = 0, p.quantity = 0,';
   if ($sort == 'pd.name' || $sort == 'p.model') {
	$sql .= " ORDER BY $append_order LCASE($sort)";
   } else {
	$sql .= " ORDER BY $append_order $sort";
   }

Спасибо, заработало, ocstore 1.5.5.1.2

Share this post


Link to post
Share on other sites

для oc 2x пашет тоже. Только модификаторы обновите после правок.

Edited by natural

Share this post


Link to post
Share on other sites

Проверил опенкарт Version 2.1.0.2 (rs.1). Все работает норм. 

Share this post


Link to post
Share on other sites
В 03.03.2016 в 00:31, sdm87 сказал:

Спасибо, заработало, ocstore1.5.5.1.2

Скажите вы может еще что-то делали?
 у меня ocstore1.5.5.1.2, но что-то не срабатывает

Share this post


Link to post
Share on other sites

для Opencart 3 это решение подходит с маленьким дополнением. Нужно в самом начале функции в селект добавить поле количества

image.thumb.png.3f138bd7e2652ee45a7bdd6a56e87639.png

Share this post


Link to post
Share on other sites
В 18.09.2012 в 10:46, dimmaq сказав:

В файле catalog\model\catalog\product.php найдите строки (примерно 160 строка)

 


   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'] . ")";
	} else {
	 $sql .= " ORDER BY " . $data['sort'];
	}
   } else {
	$sql .= " ORDER BY p.sort_order";
   }

Заменить на:

 


   if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
	$sort = $data['sort'];
   } else {
	$sort = 'p.sort_order';
   }
   $append_order = 'p.price = 0, p.quantity = 0,';
   if ($sort == 'pd.name' || $sort == 'p.model') {
	$sql .= " ORDER BY $append_order LCASE($sort)";
   } else {
	$sql .= " ORDER BY $append_order $sort";
   }

получаю ошибку
https://prnt.sc/sbekwt

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.

Sign in to follow this  

  • 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.