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

Сортировка в акциях


Recommended Posts

1 минуту назад, shankara сказал:

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

найти такой кусок

 

if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		} else {
			$sort = 'p.sort_order';
		}

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

 

поменять на такой

 

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

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

 

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

58 минут назад, spectre сказал:

Смотрите модель, что приходит туда

 

Разобрался.

Вместо p.price нужно исп-ть ps.price в файле catalog/controller/product/special.php

И затем в файле catalog/model/catalog/product.php находим метод getProductSpecials и строку:

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

Заменяем на:

if ($data['sort'] == 'ps.price') {
  $sql .= " ORDER BY (" . $data['sort'] . "+0)";
}else{
  $sql .= " ORDER BY " . $data['sort'];
}

После этих правок и чистки кеша все заработало!

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


  • 4 years later...

Всем привет.
 

10.05.2018 в 20:55, shankara сказал:

И затем в файле catalog/model/catalog/product.php находим метод getProductSpecials и строку:


Добавил в скидочные цены для одного товара и для одной группы покупателей (она вообще одна у меня - дефолтная) несколько цен с разным приоритетом. Есть такое поле в oc_product_special - priority

В итоге неправильно сортируются товары по цене на странице акций. Потому что в запросе вроде как не учитывается приоритет и берется первый попавшийся.
Но в методе getProduct ниже акционная цена меняется на правильную, с учетом приоритета, но сортировка в итоге получается уже неправильная.
Проверил, и в 3-шке - такой же запрос.
Ситуация конечно не очень распространенная, но бывает.

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

Может кому-то когда-то будет нужно. В этом файле нужно немного изменить запрос к базе, чтобы брался меньший приоритет:

SELECT DISTINCT
    ps.product_id,
    (SELECT AVG(rating)
        FROM " . DB_PREFIX . "review r1
        WHERE r1.product_id = ps.product_id AND r1.status = '1'
        GROUP BY r1.product_id
    ) AS rating
FROM " . DB_PREFIX . "product_special ps
LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id)
LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)
LEFT JOIN " . DB_PREFIX . "product_special ps2 ON (ps2.product_id = ps.product_id AND ps2.customer_group_id = ps2.customer_group_id AND ps2.priority < ps.priority)
WHERE
    p.status = '1' AND 
    p.date_available <= NOW() 
    AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND 
    ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND
    ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND(ps.date_end = '0000-00-00' OR ps.date_end > NOW())) AND
    ps2.product_special_id IS NULL
GROUP BY ps.product_id

 

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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