Двойная сортировка списка

Тема в разделе "Общие вопросы", создана пользователем Slait, 30 апр 2015.

  1. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    452
    Встал вопрос. Необходимо отсортировать список товаров по цене и что бы все товары которых нет в наличии были в конце списка, что бы не мешались в списке.
    Отключать нет смысла, так как для SEO это не очень хорошо.

    Кто реализовывал давайте поговорим.
     
  2. Chetson

    Chetson Новичок

    Сообщения:
    10
    Симпатии:
    0
    по-моему прийдется внутри двигла менять логику - это для SQL двойной запрос нужен с сортировками
    Сначала сортирует товары по В наличии / Нет в наличии, а внутри каждой группы сортирует по цене.

    т.е. идут от дорогих к дешовым товары в наличии, и потом снова так же тех которых нет
     
  3. Ravilr

    Ravilr Специалист

    Сообщения:
    3.173
    Симпатии:
    878
    Давайте поговорим ))

    В модели запроса товаров, сразу после ордербай добавляем сортировку, пример ниже
    Код:
    ORDER BY p.quantity desc, p.price asc
    Получим сначала сортировку по наличию, а внутри по цене.
     
  4. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    452
    Так отлично, теперь можно подробнее. Файл контроллера я не трогаю
    Код:
    catalog\controller\product\category.php 
    Какой файл в модели править?
     
  5. Ravilr

    Ravilr Специалист

    Сообщения:
    3.173
    Симпатии:
    878
    catalog/model/catalog/product.php
     
    Последнее редактирование: 5 май 2015
  6. Chetson

    Chetson Новичок

    Сообщения:
    10
    Симпатии:
    0
    Все операции по работе с данными, а именно правила сортировки и выборки при работе с MySQL находятся в Моделях соответствующих разделов сайта
     
  7. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    452
    Мы о OPENCART вообще говорим? Или моя оригинальная версия opencart 2.0 отличается от вашей?
    Нет такого файла
    Ладно к делу. Файл
    Код:
    catalog/model/catalog/product.php
    Opencart 2.0.1.1
    ORDER BY встречается больше 20 раз...

    Подскажите где заменить?
     

    Вложения:

    • product.txt
      Размер файла:
      26,4 КБ
      Просмотров:
      19
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    3.173
    Симпатии:
    878
    моя ошибка в пути. Исправил.

    По сортировки. Попробуйте в строке ~166
    Код:
    $sql .= " ORDER BY " . $data['sort'];
    заменить на
    Код:
    $sql .= " ORDER BY " . 'p.price desc, p.quantity';
    а в строке ~175
    Код:
            $sql .= " ASC, LCASE(pd.name) ASC";
    заменить
    Код:
    $sql .= " DESC";
    Но мне такой поход как то не нравится. Так как реализовывать надо полностью, чтобы все время в конце оказывались при остальной сортировки, а это и модель править и контроллер.

    Если вам надо для сео, то проще их просто не выводить в списке, но доступ останется.
    Для этого в конролере catalog\controller\product\category.php

    перед строкой
    PHP:
    if ($result['image']) {
    вставим
    PHP:
    if ($result['quantity'] > 0) {    

    а после строки
    Код:
                'href'  => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
               );
    
    вставим
    PHP:
                    }
     
    Последнее редактирование: 5 май 2015
    Slait нравится это.
  9. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    452
    Все отлично, вот только фильтр (mega filter PRO) помнит все товары :) (Пример: отображается 3, а в категории 7)
    2015-05-06 11-25-44 Скриншот экрана.png
     
  10. Ravilr

    Ravilr Специалист

    Сообщения:
    3.173
    Симпатии:
    878
    Фильтр это уже совсем другая история. У него своя модель и соответственно свои запросы. итд...
     
  11. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    452
    Не много недочетов в данном решении. К примеру у меня по умолчанию 60 товаров из них 50 нет в наличии, то на странице будет 10 товаров, а не 60, и все же хочется найти такую сортировку, что бы товар которого нет в наличии был в конце списка или исчезал так же в конце списка.
     
  12. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    452
    Так же цена акции не учитывается :(
    Пример списка с ценами
    2015-05-08 15-49-06 Скриншот экрана.png
     
  13. Ravilr

    Ravilr Специалист

    Сообщения:
    3.173
    Симпатии:
    878
    Никто не говорил что это универсальное решение.

    это как )) Если исчезает, то без разницы где.

    А в конце списка можно еще попробовать потосовать массив в контроллере. Т.е залить товары которых нет в наличии в отдельный массив, а потом добавить их в конец массива.
     
  14. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    452
    С фильт
    Согласен. Данный функционал был реализован в модуле Руслана (filterpro) т.е. все товары у которых кол-во меньше 1 переносятся в конец.
     
  15. Profftattoo Store

    Profftattoo Store Пользователь

    Сообщения:
    41
    Симпатии:
    1
    в стандартном модуле "Новые поступления" тоже стало сортироваться по количеству, можно как-то это избежать?