Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Сортировка в категории - без выпадающего списка


Рекомендованные сообщения

Уважаемые знатоки, подскажите как сделать сортировку по цене (От меньшей к большей / от большей к меньшей) ссылками - то есть без выпадающего списка. Интересует только по цене - все остальные типы сортировки не пользуются спросом у покупателей.

 

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

 

В этой теме , в самом низу есть решение как сделать цену ссылками, но нет вывода "От меньшей к большей / от большей к меньшей" а просто появляется стрелочка (вверх/вниз) при клике на ссылку "Цена"

 

Спасибо.

Ссылка на комментарий
Поделиться на других сайтах


тю. Делаете просто 2 ссылки, где глобальными константами в href выводите текущий урл и добавляете - &sort=p.price&order=DESC либо ASC соответственно.

Ссылка на комментарий
Поделиться на других сайтах


тю. Делаете просто 2 ссылки, где глобальными константами в href выводите текущий урл и добавляете - &sort=p.price&order=DESC либо ASC соответственно.

А можно поподробнее, я не совсем понял

Ссылка на комментарий
Поделиться на других сайтах


<a href="<?php echo $_SERVER['REQUEST_URI']; ?>&sort=p.price&order=DESC">По убыванию цены</a>
<a href="<?php echo $_SERVER['REQUEST_URI']; ?>&sort=p.price&order=ASC">По возрастанию цены</a>

 

 

Это в category.tpl в удобное для Вас место, как сверстаете уже другое дело

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


Спасибо, заработало!   +1

 

А не подскажите как сделать чтоб данная сортировка работала с учетом скидок. Т.е. сейчас получается сортирует правильно. Если сделать скидку на какой-либо товар (Старая цена 100 новая цена 50) - то сортировка срабатывает по старой цене, хотя по здравому смыслу сортировка должна срабатывать учитывая новую цену.

 

Спасибо

Ссылка на комментарий
Поделиться на других сайтах


<a href="<?php echo $_SERVER['REQUEST_URI']; ?>&sort=p.price&order=DESC">По убыванию цены</a>
<a href="<?php echo $_SERVER['REQUEST_URI']; ?>&sort=p.price&order=ASC">По возрастанию цены</a>

 

 

Это в category.tpl в удобное для Вас место, как сверстаете уже другое дело

 

 

Подскажите как сделать чтоб данная сортировка работала с учетом скидок. Т.е. сейчас получается сортирует правильно. Если сделать скидку на какой-либо товар (Старая цена 100 новая цена 50) - то сортировка срабатывает по старой цене, хотя по здравому смыслу сортировка должна срабатывать учитывая новую цену.

 

Спасибо

Ссылка на комментарий
Поделиться на других сайтах


Насколько я помню, то из коробки так нельзя. Но гарантировать не могу, возможно кто-то из гуру знает. Спросите в ЛС

Ссылка на комментарий
Поделиться на других сайтах


Подскажите как сделать чтоб данная сортировка работала с учетом скидок. Т.е. сейчас получается сортирует правильно. Если сделать скидку на какой-либо товар (Старая цена 100 новая цена 50) - то сортировка срабатывает по старой цене, хотя по здравому смыслу сортировка должна срабатывать учитывая новую цену.

Вроде 6 месяцев назад пофиксили: https://github.com/opencart/opencart/issues/112

Коммит с этим фиксом вроде нашёл (дифф прикреплён к сообщению).

Или можно взять `catalog/model/catalog/product.php` -- то ли последний из репозитория, то ли тот, что hkulekci зпостил в гист на тот момент (6 мес. назад). И сравнить со своим. Там пару строк изменить надо. В диффе всё плюсами и минусами отмечено.

sort-price-fix.diff.zip

Ссылка на комментарий
Поделиться на других сайтах


Подскажите как сделать чтоб данная сортировка работала с учетом скидок. Т.е. сейчас получается сортирует правильно. Если сделать скидку на какой-либо товар (Старая цена 100 новая цена 50) - то сортировка срабатывает по старой цене, хотя по здравому смыслу сортировка должна срабатывать учитывая новую цену.

Вроде 6 месяцев назад пофиксили: https://github.com/opencart/opencart/issues/112

Коммит с этим фиксом вроде нашёл (дифф прикреплён к сообщению).

Или можно взять `catalog/model/catalog/product.php` -- то ли последний из репозитория, то ли тот, что hkulekci зпостил в гист на тот момент (6 мес. назад). И сравнить со своим. Там пару строк изменить надо. В диффе всё плюсами и минусами отмечено.

 

У меня как я и писал 1.5.1.3 версия - делал как в Diff ошибку выдает, на Гитхабе по переписке я вижу что для моей версии проблема не решена....

 

Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.la' at line 1

Error No: 1064

SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '8' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.category_id = '80' GROUP BY p.product_id ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END) DESC LIMIT 0,28 in/home/www/system/database/mysql.php on line 49

Ссылка на комментарий
Поделиться на других сайтах


Если ещё актуально. На 1.5.1.3 работает нормально.

 

В файле catalog/model/catalog/product.php 38 строка:

 

$sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p 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)"; 

 

заменить на 

$sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM " . DB_PREFIX . "product p 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)";

 

В том же файле 129 строка:

 

if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
    $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
} else {
    $sql .= " ORDER BY " . $data['sort'];
}

заменить на 

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'];
}
  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.