Перейти к содержанию

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

Как сделать вместо сортировки по цене, сортировку по минимальной цене опций(цены на все товары 0)?

Поделиться сообщением


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

0 это минимальная цена. Если на все товары 0, значит и максимальная тоже. А значит вроде, как должна сортировка быть по-умолчанию, например, по id товара.

Поделиться сообщением


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

По-умолчанию идет по имени. Мне нужно что бы в контроллере сортировка по цене (p.price) брала минимальное значение опции товара(опция одна, значений несколько).

 

Товары выводятся правильно, с правильной ценой(ценой опции), но неправильно сортируюутся.

Изменено пользователем Vuland

Поделиться сообщением


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

сортируйте в контроллере
usort()

Поделиться сообщением


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

Универсально 

Но надо же заплатить 300 руб ;)

 

Поделиться сообщением


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

Решение для OpencartPro 2.3

Что бы вывести сортировку по цене опции нужно заменить в файле catalog/model/catalog/product.php
 

$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)$this->config->get('config_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)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special";

на

$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)$this->config->get('config_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)$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())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT price FROM " . DB_PREFIX . "product_option_value pov WHERE pov.product_id = p.product_id AND pov.option_value_id = '49' ORDER BY pov.price ASC) AS option_price";

и

$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";

заменить на

$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE option_price END)";

Код сортирует товары по определенной опции, id которой указывается в запросе, если хотите что бы сортировка учитывала цены всех опций то удалите из запроса строчку AND pov.option_value_id = '49' или замените на id своей опции

Изменено пользователем igorauscas

Поделиться сообщением


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

Если кто знает подскажите как еще отсортировать товары так что бы если у него цена опции 0 или не заполнена то товар бы попадал в конец списка?

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От LionHunter
      Здравствуйте
       
      Возможно кто-то такое делал или знает как: необходимо, чтобы товары в категории сортировались (по умолчанию) в зависимости от количества продаж. То есть, товары, которых продано  больше всего за период существования магазина были вверху и далее по убыванию.
      Это вообще реально сделать? Если вдруг есть тема, где что-то подобное уже обсуждалось - буду благодарен за подсказку.  
    • От ArtMike
      Встал вопрос о модификации стандартной сортировки и возможности добавления в неё сортировки по подкатегориям. Зачем?  Есть же куча модулей - фильтров!
      Я думаю ни для кого не секрет что больше половина трафика практически на любой ресурс идет с мобильных устройств и собственно там их (эти все крутые фильтры просто некуда пихать). А вот стандартная сортировка смотрится компактно и вполне элегантно, работает привычно и функционально для юзера. 
      Вот только бы добавить туда возможность сортировки по подкатегориям. 
      В очередной раз удивлен, что никому это не понадобилось пока и решений я не нашел, ни в РУ сегменте, ни в ЕN сегменте,
      Может кто-то реализовывал подобное? Или готов за разумное вознаграждение помочь? 
       

    • От likesmartass
      300.00 руб
      Скачать/Купить дополнение


      Сортировка перетаскиванием Drag & Drop Sort (товары, категории, атрибуты, опции, производители, статьи)
      Сортировка товаров, категорий, производителей, атрибутов, групп атрибутов, опций, статей одной лишь мышкой! (OpenCart 2.3.x/OcStore 2.3.x)
       
       
      Demo url: http://oc23en.505559.ru/admin/index.php?route=catalog/product
      Demo login: demo
      Demo pass: demo
       
       
       
      Как работать с модулем:
       
      1) Для активации сортировки, необходимо нажать кнопку "Режим перетаскивания".
           
       
      2) (Необязательно!) Если у Вас в магазине много товаров с одинаковым значение сортировки, то нажмите кнопку "Упорядочить сортировку", для автоматической расстановки значений.
           
       
      3) Для сортировки, просто потяните за кнопку или измените числовое значение в поле "Сортировка".
          
       
       
      Автоматическая сортировка расставляет значения "через 1", это сделано для того, чтобы, в ручную можно было расставить номера сортировки легче (т.к. между соседними номерами "зазор").
       
      Гарантируется совместимость со стандартным OpenCart 2.3 и ocStore 2.3. Если у Вас установлены другие модули, мешающие данному модулю, то Вы всегда можете обратиться за адаптацией по почте ed.smartass@gmail.com. Если мешающий модуль/тема популярен (200+ покупок), то адаптация бесплатно!
       
       
      Модуль не заменяет никакие файлы.
      Для установки использовать стандартный установщик OpenCart.
       
      Установка:
      (Дополнения / Установка дополнений) Установите DragSort.*.ocmod.zip, (Дополнения / Менеджер дополнений) Нажмите кнопку обновить.  
      По всем вопросам, багам, замечаниям, предложениям обращаться:
      Почта: ed.smartass@gmail.com; skype: wari0z  
      Добавил likesmartass Добавлено 06.10.2018 Категория Модули Системные требования Сайт разработчика mailto:ed.smartass@gmail.ru Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3 ocStore 2.3 OpenCart.Pro, ocShop  
    • От likesmartass
      Сортировка товаров, категорий, производителей, атрибутов, групп атрибутов, опций, статей одной лишь мышкой! (OpenCart 2.3.x/OcStore 2.3.x)
       
       
      Demo url: http://oc23en.505559.ru/admin/index.php?route=catalog/product
      Demo login: demo
      Demo pass: demo
       
       
       
      Как работать с модулем:
       
      1) Для активации сортировки, необходимо нажать кнопку "Режим перетаскивания".
           
       
      2) (Необязательно!) Если у Вас в магазине много товаров с одинаковым значение сортировки, то нажмите кнопку "Упорядочить сортировку", для автоматической расстановки значений.
           
       
      3) Для сортировки, просто потяните за кнопку или измените числовое значение в поле "Сортировка".
          
       
       
      Автоматическая сортировка расставляет значения "через 1", это сделано для того, чтобы, в ручную можно было расставить номера сортировки легче (т.к. между соседними номерами "зазор").
       
      Гарантируется совместимость со стандартным OpenCart 2.3 и ocStore 2.3. Если у Вас установлены другие модули, мешающие данному модулю, то Вы всегда можете обратиться за адаптацией по почте ed.smartass@gmail.com. Если мешающий модуль/тема популярен (200+ покупок), то адаптация бесплатно!
       
       
      Модуль не заменяет никакие файлы.
      Для установки использовать стандартный установщик OpenCart.
       
      Установка:
      (Дополнения / Установка дополнений) Установите DragSort.*.ocmod.zip, (Дополнения / Менеджер дополнений) Нажмите кнопку обновить.  
      По всем вопросам, багам, замечаниям, предложениям обращаться:
      Почта: ed.smartass@gmail.com; skype: wari0z  
    • От oia15
      Здравствуйте! На OcStore 2.3. Нужно сделать, чтобы ранжирование товаров в категории по умолчанию было по одному из атрибутов товаров. И можно было бы менять только от меньшего к большему / большего к меньшему. Причем для разных категорий может быть разный атрибут, по которому нужно ранжировать. Соответствия category_id -- атрибут, по которому нужно ранжировать категорию можно просто задавать в файле на сервере без интерфейсных наворотов.   Если может кто-то помочь с реализацией задачи?  Сколько будет стоить доработка?   Может если кто модуль подходящий знает, я не нашел. Наверное проще доработкой.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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