Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Сортировка в зависимости от наличия. Как?


SSShop

Recommended Posts

Подскажите пожалуйста как сделать, если количество товара > 0 то сделать порядок сортировки например 0, а если меньше или =0, то порядок сортировки например 1? Чтобы сначала показывался товар в наличии, а потом на заказ.

Надіслати
Поділитися на інших сайтах


[uPD]

если правильно понял вопрос, то:

добавить в "ORDER BY" соответствующих sql-запросов условие

quantity DESC

реализация на примере:

catalog/model/catalog/product.php

public function getProductsByCategoryId($category_id, $values, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20)
меняем

if (in_array($sort, $sort_data)) {
			if ($sort == 'pd.name' || $sort == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $sort . ")";
			} else {
				$sql .= " ORDER BY " . $sort;
			}
		} else {
			$sql .= " ORDER BY p.sort_order";	
		}
			
		if ($order == 'DESC') {
			$sql .= " DESC";
		} else {
			$sql .= " ASC";
		}
на

if (in_array($sort, $sort_data)) {
			if ($sort == 'pd.name' || $sort == 'p.model') {
				$sql .= " ORDER BY LCASE(" . $sort . ")";
			} else {
				$sql .= " ORDER BY " . $sort;
			}
			if ($order == 'DESC') {
				$sql .= " DESC";
			} else {
				$sql .= " ASC";
			}
		} else {
			$sql .= " ORDER BY p.quantity DESC";	
		}

решение на скорую руку.

один раз уже переписал :roll:

возможно что-то еще не учел

Надіслати
Поділитися на інших сайтах

afwollis, объясни пожалуйста что делает этот код, я вставил у себя, все равно сортировка когда по-умолчанию, то зависит только от порядка сортировки.

Я думаю, что надо сделать так:

1 вариант: Как только товара становится 0 или меньше (например купили или в админке количество изменил), порядок сортировки для этого товара сразу изменяется на 1, а как только я добавил товар в админке и нажал сохранить, то порядок сортировки для этого товара становится 0. Тогда все будет правильно, сначала показаны товары в наличии, а потом на заказ.

2 вариант (лучше, но сложнее как мне кажется): Сделать, чтобы сортировка зависила от порядка сортировки (как сейчас), но учитывала наличие товара, т.е. сначала показывала товары в наличии в том порядке какой номер порядка сортировки, а потом показывала товары на заказ опять же в порядке сортировки.

Надіслати
Поділитися на інших сайтах


мда, может я и перемудрил https://opencartforum.com/public/style_emoticons/default/icon_question.gif

сортировка зависит от параметра "ORDER BY" в запросах. формирующих список товаров.

добавление "quantity DESC", как я написал, означает вывод "по количеству товара в порядке убывания" (т.е. начинаем с товаров, которых больше в магазине и потом в конце будут те, которых меньше или вовсе нет).

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

по вашим мыслям:

1. раз это не лучший вариант - пока что пропустим его.

2. может так?

if (in_array($sort, $sort_data)) {
         if ($sort == 'pd.name' || $sort == 'p.model') {
            $sql .= " ORDER BY LCASE(" . $sort . ")";
         } else {
            $sql .= " ORDER BY " . $sort;
         }
         if ($order == 'DESC') {
            $sql .= " DESC";
         } else {
            $sql .= " ASC";
         }
      } else {
         $sql .= " ORDER BY p.quantity DESC, p.sort_order ASC";
      }
$sql .= " ORDER BY p.quantity DESC, p.sort_order ASC";
говорит о том, что сортировка происходит в таком порядке:

1) по количеству товара в порядке убывания (больше товара - выше позиция; меньше - ниже; ноль - еще ниже; меньше ноля - в конце);

2) по полю "порядок сортировки".

если же надо проверять именно статус товара ("в наличии" / "нет в наличии" / "только на заказ") - тогда в данный момент подсказать не могу - не думал об этом.

что-то я вобще не в теме - такое ощущение, что двиг первый раз вижу

Надіслати
Поділитися на інших сайтах

afwollis, спасибо за объяснения, вроде примерно понял, что значит код, но только все равно не получается. Пытаюсь сделать твой вариант:

"говорит о том, что сортировка происходит в таком порядке:

1) по количеству товара в порядке убывания (больше товара - выше позиция; меньше - ниже; ноль - еще ниже; меньше ноля - в конце);

2) по полю "порядок сортировки"."

всем товарам выставил одинаковый порядок сортировки, но у меня он по-умолчанию почему-то сортирует по артикулу и с твоим кодом, и со стандартным https://opencartforum.com/public/style_emoticons/default/icon_question.gif

Надіслати
Поділитися на інших сайтах


SSShop, спасибо за терпение и чтение моих не всегда умных мыслей :)

во-первых:

...всем товарам выставил одинаковый порядок сортировки...

естессно тут он будет сортировать по имени или модели или хз, что там найдет. ибо значение "порядок сортировки" у всех данных одинаковый и просто опускается.

во-вторых:

возможно вы правы и я опять что-то прое#а... упустил.

но к черту.

если никто не подскажет вам, как решить этот вопрос - отпишусь через пару дней.

сейчас есть срочные дела.

Надіслати
Поділитися на інших сайтах

Пока сделал так:

в файле catalog/controller/product/category.php

поменял 69 строку

$sort = 'p.sort_order';

на

$sort = 'p.quantity';

Получается теперь все товары в наличии стоят выше товаров на заказ.

Только не понял почему этот способ не работает в файле search.php :)

Надіслати
Поділитися на інших сайтах


  • 3 months later...

Пока сделал так:

в файле catalog/controller/product/category.php

поменял 69 строку

$sort = 'p.sort_order';

на

$sort = 'p.quantity';

Получается теперь все товары в наличии стоят выше товаров на заказ.

Только не понял почему этот способ не работает в файле search.php :)

Подскажите как это можно сделать на версии ocStore 0.1.7?

Там есть

$sort = 'p.sort_order';

только она 79 и когда её меняю на

$sort = 'p.quantity';

ничего не происходит, сортировка остается так же по-умолчанию.

Надіслати
Поділитися на інших сайтах


Sintez, у меня тоже ocStore 0.1.7 (недавно перешел на него), этот способ работает, чем больше товара, тем товар выше. Это на странице категории. Этот способ просто изменяет сортировку по-умолчанию, тип сортировки остается по-умолчанию.

Надіслати
Поділитися на інших сайтах


Sintez, у меня тоже ocStore 0.1.7 (недавно перешел на него), этот способ работает, чем больше товара, тем товар выше. Это на странице категории. Этот способ просто изменяет сортировку по-умолчанию, тип сортировки остается по-умолчанию.

То что тип сортировки остается по-умолчанию я знаю. Меняю код в этом месте:

catalog\controller\product\category.php

$this->data['thumb'] = $this->model_tool_image->resize($image, $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
			
			if (isset($this->request->get['page'])) {
				$page = $this->request->get['page'];
			} else { 
				$page = 1;
			}	
			
			if (isset($this->request->get['sort'])) {
				$sort = $this->request->get['sort'];
			} else {
				$sort = 'p.quantity'; <--------------------Вот тут, строка 79
			}

			if (isset($this->request->get['order'])) {
				$order = $this->request->get['order'];
			} else {
				$order = 'ASC';
			}

Метод сортировки не изменился, ставил кол-во у товаров -2, всё равно этот товар показывается на 2-ом месте, хотя после него идут товары, которых намного больше, чем -2.

Подскажите, что я неправильно делаю?

Разобрался....

Отредактировал, то что подсказал afwollis и все норм. Спасибо!

Змінено користувачем Sintez
Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


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

Да, есть такое дело...

У меня решилось вот так:

catalog\controller\product\category.php

$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_default'),
					'value' => 'p.quantity-ASC',<--------------Меняем тут, строка 199
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.quantityr&order=ASC')<---------------------- и тут
				);
Надіслати
Поділитися на інших сайтах


  • 4 months later...

Попробовал все предложенные выше способы - изменений никаких ocStore 0.2.0 :(

$this->data['thumb'] = $this->model_tool_image->resize($image, $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
                        
                        if (isset($this->request->get['page'])) {
                                $page = $this->request->get['page'];
                        } else { 
                                $page = 1;
                        }       
                        
                        if (isset($this->request->get['sort'])) {
                                $sort = $this->request->get['sort'];
                        } else {
                                $sort = 'p.quantity'; <------------------------- поменял тут
                        }

                        if (isset($this->request->get['order'])) {
                                $order = $this->request->get['order'];
                        } else {
                                $order = 'ASC';
                        }

$this->data['sorts'][] = array(
                                        'text'  => $this->language->get('text_default'),
                                        'value' => 'p.quantity-ASC',<-------------- изменил здесь
                                        'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.quantityr&order=ASC')<------------ и тут поменял
                                );
Подскажите, что еще сделать, чтобы заработала сортировка по наличию на складе.
Надіслати
Поділитися на інших сайтах


  • 3 years later...

http://sergey-rasput...3/opencart.html

 

Делаем, товар которого нет в наличии в конце списка при просмотре в категориях. На основе этого можете сделать отображение в поиске, в производителях и т.д

 
Для того чтобы товар которого нет в наличии был в конце списка, нам нужно поменять сортировку по умолчанию. Я отталкивался от значения "количество" и делал сортировку по этому полю.
 
Открываем catalog/controller/product/category.php
 
Ищем строки и делаем как ниже указано:
 
if (isset($this->request->get['sort'])) {
 $sort = $this->request->get['sort'];
} else {
 //$sort = 'p.sort_order';
 $sort = 'p.quantity';
}
 
if (isset($this->request->get['order'])) {
 $order = $this->request->get['order'];
} else {
 //$order = 'ASC';
  $order = 'DESC';
} 
 
После этих изменений товар будет сортироваться по полю количество по убыванию, самое меньшее в конце.
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.