Встал вопрос. Необходимо отсортировать список товаров по цене и что бы все товары которых нет в наличии были в конце списка, что бы не мешались в списке. Отключать нет смысла, так как для SEO это не очень хорошо. Кто реализовывал давайте поговорим.
по-моему прийдется внутри двигла менять логику - это для SQL двойной запрос нужен с сортировками Сначала сортирует товары по В наличии / Нет в наличии, а внутри каждой группы сортирует по цене. т.е. идут от дорогих к дешовым товары в наличии, и потом снова так же тех которых нет
Давайте поговорим )) В модели запроса товаров, сразу после ордербай добавляем сортировку, пример ниже Код: ORDER BY p.quantity desc, p.price asc Получим сначала сортировку по наличию, а внутри по цене.
Так отлично, теперь можно подробнее. Файл контроллера я не трогаю Код: catalog\controller\product\category.php Какой файл в модели править?
Все операции по работе с данными, а именно правила сортировки и выборки при работе с MySQL находятся в Моделях соответствующих разделов сайта
Мы о OPENCART вообще говорим? Или моя оригинальная версия opencart 2.0 отличается от вашей? Нет такого файла Ладно к делу. Файл Код: catalog/model/catalog/product.php Opencart 2.0.1.1 ORDER BY встречается больше 20 раз... Подскажите где заменить?
моя ошибка в пути. Исправил. По сортировки. Попробуйте в строке ~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: }
Все отлично, вот только фильтр (mega filter PRO) помнит все товары (Пример: отображается 3, а в категории 7)
Не много недочетов в данном решении. К примеру у меня по умолчанию 60 товаров из них 50 нет в наличии, то на странице будет 10 товаров, а не 60, и все же хочется найти такую сортировку, что бы товар которого нет в наличии был в конце списка или исчезал так же в конце списка.
Никто не говорил что это универсальное решение. это как )) Если исчезает, то без разницы где. А в конце списка можно еще попробовать потосовать массив в контроллере. Т.е залить товары которых нет в наличии в отдельный массив, а потом добавить их в конец массива.
С фильт Согласен. Данный функционал был реализован в модуле Руслана (filterpro) т.е. все товары у которых кол-во меньше 1 переносятся в конец.
в стандартном модуле "Новые поступления" тоже стало сортироваться по количеству, можно как-то это избежать?