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

[Решено] Сортировка по умолчанию сначала по количеству, потом по цене


sibas11q

Recommended Posts

Всем здравствуйте.

Подскажите, пожалуйста, как сделать такую сортировку:

по умолчанию сначала по наличию (или количеству товара), а затем одновременно по цене. То есть хочется сделать так, чтобы товар, на который цена 0, был в конце, а тот, который с ценой, сортировался по возрастанию цены.

Зашел в catalog/controller/product/category.php

сделал так:

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 = 'DESC';

}

В итоге сортирует по наличию. Как дальше сделать сортировку по цене, подскажите, пожалуйста.

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


Вот ссылочка ссылка на которую меня бросали с друого форума, но сделать как там описано не получилось, версия другая (у меня 1.5.4.1.)

може Вы дороеетесь до победы :) ждем!!! Просьба осветить подробненько чего куды.... Спасибо

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


Вот ссылочка ссылка на которую меня бросали с друого форума, но сделать как там описано не получилось, версия другая (у меня 1.5.4.1.)

може Вы дороеетесь до победы :) ждем!!! Просьба осветить подробненько чего куды.... Спасибо

Не, вроде это не поможет.

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


  • 3 weeks later...

Файл: /catalog/model/catalog/product.php

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {

if ($data['sort'] == 'p.quantity' || $data['sort'] == 'p.model') {

$sql .= " ORDER BY p.quantity DESC, p.price";

} else {

$sql .= " ORDER BY " . $data['sort'];

}

} else {

$sql .= " ORDER BY p.sort_order";

}

if (isset($data['order']) && ($data['order'] == 'DESC')) {

$sql .= " ASC, LCASE(pd.name) DESC";

} else {

$sql .= " ASC, LCASE(pd.name) ASC";

}

Пояснение:

1. if ($data['sort'] == 'p.quantity' || $data['sort'] == 'p.model') - тут я заменил на p.quantity (изначально было pd.name), так как у меня в файле /catalog/controller/product/category.php в

if (isset($this->request->get['sort'])) {

$sort = $this->request->get['sort'];

} else {

$sort = 'p.quantity';

}

стоит $sort = 'p.quantity';

2. ORDER BY p.quantity DESC, p.price - это мои данные, по которым мне надо чтобы сортировалось, то есть для меня сортировка должна быть сначала по количеству, затем по цене.

3. $sql .= " ASC, LCASE(pd.name) DESC"; - тут поставил ASC (изначально было DESC), чтобы сортировало по цене по возрастанию.

4. Почему-то, чтобы вступило в силу, пришлось просто в админке зайти в любой товар я нажать там сохранить, тогда сортировка начинала работать. На форуме встречал про это, но почему так надо делать без понятия. Может кто в курсе, что за механизм такой?

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


  • 8 months later...
  • 3 months later...

Спасибо sibas11q за выложенное решение. С его помощью сделала на своем сайте сортировку по количеству и порядку сортировки. А то после правки только файла catalog/controller/product/category.php товары выводились почему-то в алфавитном порядке. Теперь все о.к., еще раз спасибо!

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


  • 3 months later...

Файл: /catalog/model/catalog/product.php

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {

if ($data['sort'] == 'p.quantity' || $data['sort'] == 'p.model') {

$sql .= " ORDER BY p.quantity DESC, p.price";

} else {

$sql .= " ORDER BY " . $data['sort'];

}

} else {

$sql .= " ORDER BY p.sort_order";

}

if (isset($data['order']) && ($data['order'] == 'DESC')) {

$sql .= " ASC, LCASE(pd.name) DESC";

} else {

$sql .= " ASC, LCASE(pd.name) ASC";

}

Пояснение:

1. if ($data['sort'] == 'p.quantity' || $data['sort'] == 'p.model') - тут я заменил на p.quantity (изначально было pd.name), так как у меня в файле /catalog/controller/product/category.php в

if (isset($this->request->get['sort'])) {

$sort = $this->request->get['sort'];

} else {

$sort = 'p.quantity';

}

стоит $sort = 'p.quantity';

2. ORDER BY p.quantity DESC, p.price - это мои данные, по которым мне надо чтобы сортировалось, то есть для меня сортировка должна быть сначала по количеству, затем по цене.

3. $sql .= " ASC, LCASE(pd.name) DESC"; - тут поставил ASC (изначально было DESC), чтобы сортировало по цене по возрастанию.

4. Почему-то, чтобы вступило в силу, пришлось просто в админке зайти в любой товар я нажать там сохранить, тогда сортировка начинала работать. На форуме встречал про это, но почему так надо делать без понятия. Может кто в курсе, что за механизм такой?

Подскажите, пожалуйста, достаточно описанных выше действий или обязательно править файл catalog/controller/product/category.php. Пробовал вносить изменения и так и так, но сортирует только по количеству, а по цене нет. У меня версия движка 1.5.6, в файле catalog/model/catalog/product.php следующий фрагмент:

 

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {

                              if ($data['sort'] == 'p.quantity' || $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['order']) && ($data['order'] == 'DESC')) {

                              $sql .= " DESC, LCASE(pd.name) DESC";

                    } else {

                              $sql .= " ASC, LCASE(pd.name) ASC";

                    }

 

Может кто-то подскажет, что на что заменить.

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


  • 8 months later...

Вывод товаров: порядок сортировки, по наличию.

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

 

1. Файл /catalog/controller/product/category.php - оставляем без изменений.
    По умолчанию должны быть значения: $sort = 'p.sort_order'; и $order = 'ASC';

2. Файл /catalog/model/catalog/product.php - редактируется следующим образом:

а) Находим код:

			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['order']) && ($data['order'] == 'DESC')) {
				$sql .= " DESC, LCASE(pd.name) DESC";
			} else {
				$sql .= " ASC, LCASE(pd.name) ASC";
			}

 

б) Заменяем найденный код на:

			if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
				if ($data['sort'] == 'p.sort_order' || $data['sort'] == 'p.model') {
					$sql .= " ORDER BY p.sort_order ASC, p.quantity";
				} else {
					$sql .= " ORDER BY " . $data['sort'];
				}
			} else {
				$sql .= " ORDER BY p.sort_order";
			}
			
			if (isset($data['order']) && ($data['order'] == 'DESC')) {
				$sql .= " DESC, LCASE(pd.name) DESC";
			} else {
				$sql .= " DESC, LCASE(pd.name) ASC";
			}
Надіслати
Поділитися на інших сайтах

  • 6 months later...

 

Вывод товаров: порядок сортировки, по наличию.

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

 

1. Файл /catalog/controller/product/category.php - оставляем без изменений.

    По умолчанию должны быть значения: $sort = 'p.sort_order'; и $order = 'ASC';

2. Файл /catalog/model/catalog/product.php - редактируется следующим образом:

а) Находим код:

			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['order']) && ($data['order'] == 'DESC')) {
				$sql .= " DESC, LCASE(pd.name) DESC";
			} else {
				$sql .= " ASC, LCASE(pd.name) ASC";
			}

 

б) Заменяем найденный код на:

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

 

а как быть если фильтр про затирает эти правки? при фильтрации  выдает все в разброс.

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


  • 3 weeks later...
  • 3 years later...
Чтоб получить сортировку и в категории и в фильтр про по Возрастанию цены для 1.5 версии, сделал так

файл filterpro.php (контроллер)

		if(isset($this->request->post['sort'])) {
			$sort = $this->request->post['sort'];
		} else {
			//$sort = 'p.name';
            $sort = 'p.price';
		}

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



в category.php (контроллер)
if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		} else {
           //  $sort = 'p.sort_order';
           $sort = 'p.price';
          //  $sort = 'p.quantity';
           // $sort = 'p.name';
		}

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



файл catalog/model/catalog/product.php

 /*
        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['order']) && ($data['order'] == 'DESC')) {
			$sql .= " DESC, LCASE(pd.name) DESC";
		} else {
			$sql .= " ASC, LCASE(pd.name) ASC";
		}
       */ 
   
        
        // фильтрация по цене и наличию
      
       
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";	
		}
            
и в фильтре незабыть поставить галочку ПРИЖАТ, что б показывало только то что в наличии, тогда будет все тип топ и в категории и при фильтрации

 

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


  • 2 years later...
Спойлер

 

В 29.03.2013 в 10:18, sibas11q сказал:

Файл: /catalog/model/catalog/product.php

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {

if ($data['sort'] == 'p.quantity' || $data['sort'] == 'p.model') {

$sql .= " ORDER BY p.quantity DESC, p.price";

} else {

$sql .= " ORDER BY " . $data['sort'];

}

} else {

$sql .= " ORDER BY p.sort_order";

}

if (isset($data['order']) && ($data['order'] == 'DESC')) {

$sql .= " ASC, LCASE(pd.name) DESC";

} else {

$sql .= " ASC, LCASE(pd.name) ASC";

}

Пояснение:

1. if ($data['sort'] == 'p.quantity' || $data['sort'] == 'p.model') - тут я заменил на p.quantity (изначально было pd.name), так как у меня в файле /catalog/controller/product/category.php в

if (isset($this->request->get['sort'])) {

$sort = $this->request->get['sort'];

} else {

$sort = 'p.quantity';

}

стоит $sort = 'p.quantity';

2. ORDER BY p.quantity DESC, p.price - это мои данные, по которым мне надо чтобы сортировалось, то есть для меня сортировка должна быть сначала по количеству, затем по цене.

3. $sql .= " ASC, LCASE(pd.name) DESC"; - тут поставил ASC (изначально было DESC), чтобы сортировало по цене по возрастанию.

4. Почему-то, чтобы вступило в силу, пришлось просто в админке зайти в любой товар я нажать там сохранить, тогда сортировка начинала работать. На форуме встречал про это, но почему так надо делать без понятия. Может кто в курсе, что за механизм такой?

 

 

Добрый день, подскажите пожалуйста куда что нужно добавить, делаю все по вашему гайду, отваливается сайт в категории. Вот вроде бы если не ошибся с правками. Буду очень и очень благодарен.

category.php product.php

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


1 час назад, MBStore сказал:
  Показать контент

 

 

 

Добрый день, подскажите пожалуйста куда что нужно добавить, делаю все по вашему гайду, отваливается сайт в категории. Вот вроде бы если не ошибся с правками. Буду очень и очень благодарен.

category.php 15 \u043a\u0411 · 0 downloads product.php 25 \u043a\u0411 · 0 downloads

3я версия OCStore. Ничего не получается, запутался окончательно.

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


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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