Делаем запоминающую сортировку

Yuriy_Z

Доработка+ OpenCart
Регистрация
22 Июл 2012
Сообщения
159
Реакции
92
Всем известный стандартный способ сортировки товаров в категории на opencart(по цене, названию ... по количеству отображаемых товаров на странице).
Сортировка работает нормально, вот только есть одно неудобство для пользователей сайта - если перейти на другую страницу или категорию сайта то ранее выбранный вами способ сортировки не запоминается и при открытии другой категории вам приходится снова выбирать способ сортировки.
Для того чтобы способ сортировки запоминался необходимо всего в одном файле внести изменения а именно в
catalog/controller/product/category.php

Ищем
PHP:
        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';
        }
Меняем на
PHP:
        if (empty($_SESSION['sort']) or empty($_SESSION['order'])) {
            $sort = $_SESSION['sort'] = isset($this->request->get['sort']) ? $this->request->get['sort'] : 'p.sort_order';
            $order = $_SESSION['order'] = isset($this->request->get['order']) ? $this->request->get['order'] : 'ASC';
      } elseif(isset($this->request->get['sort'])) {
          $sort = $_SESSION['sort'] = $this->request->get['sort'];
          $order = $_SESSION['order'] = $this->request->get['order'];
      } else  {
          $sort = $_SESSION['sort'];
          $order = $_SESSION['order'];
      }
Ищем
PHP:
        if (isset($this->request->get['limit'])) {
            $limit = $this->request->get['limit'];
        } else {
            $limit = $this->config->get('config_catalog_limit');
        }
Меняем на
PHP:
        if (empty($_SESSION['limit'])) {
            $limit = $_SESSION['limit'] = isset($this->request->get['limit']) ? $this->request->get['limit'] : $this->config->get('config_catalog_limit');
        } elseif(isset($this->request->get['limit'])) {
            $limit = $_SESSION['limit'] = $this->request->get['limit'];
        } else $limit = $_SESSION['limit'];
 
Работает! Может какие то баги кто то замечал ?
 
Работает! Может какие то баги кто то замечал ?
Например какие баги? ) Ето ж сессия которая хранит выбрание параметры пользователем, здесь багов не может быть)
 
Например какие баги? ) Ето ж сессия которая хранит выбрание параметры пользователем, здесь багов не может быть)
Можно ставить любой модуль, не каких ошибок в дальнейшем не возникнет ?
 
Можно ставить любой модуль, не каких ошибок в дальнейшем не возникнет ?
Нет, не возникнет!
Только если надумаеш ставить Фильтр Про, то етот способ тебе не подойдет, так как фильтр про всех в одном месте держыт и способ сортировки "встроен в него"
 
Замените еще в шаблоне с get на post и вас полюбит Гугл :)
 
А нет ли мода, чтобы товары, которых нет в наличии показывались в конце списка?
 
а как сделать чтоб сортировка по умолчанию была по рейтингу?
 
а как сделать чтоб сортировка по умолчанию была по рейтингу?
Для просмотра ссылки Войди или Зарегистрируйся

можно менять такие значения

$sort = 'pd.name'; - по Имени
$sort = 'p.price'; - по Ценам
$sort = 'rating'; - по Рейтингу

Направление
$order = 'ASC'; - от А до Я (Низкому)
$order = 'DESC' - от Я до А (Высокому)
 
Назад
Сверху