JohnnyVega Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 Всех приветствую. Есть такая проблема. Нужно, чтобы в категории при сортировке товаров по цене по возрастанию, товары с нулевой ценой были в конце списка. Пробывал разные варианты, но, видимо, моих знаний MySql не хватает. Буду благодарен, если кто-нибудь поможет решить проблему или направит на путь истинный. На входе: Opencart 1.5.3.1 Кусок кода из файла catalog/model/catalog/product.php с функцией getProducts($data = array()) Как Вы видите, код немного изменён. В начале функции изменён sql - запрос, чтобы вытягивать discount и special, и в конце запроса, там где сортировка, запрос тоже изменён, чтобы использовать discount и special. Собственно, изменения взяты из более поздних версий движка. Ниже кусок кода. Комментом выделено то место, где скорее всего потребуются изменения. // Sorting by price with special and discount if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } // Sorting by price with special and discount Код функции getProducts($data = array()) public function getProducts($data = array()) { if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getCustomerGroupId(); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } $cache = md5(http_build_query($data)); $product_data = $this->cache->get('product.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache); if (!$product_data) { //Original //$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)"; // price with special and discount $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) "; // price with special and discount if (!empty($data['filter_tag'])) { $sql .= " LEFT JOIN " . DB_PREFIX . "product_tag pt ON (p.product_id = pt.product_id)"; } if (!empty($data['filter_category_id'])) { $sql .= " LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)"; } $sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; if (!empty($data['filter_name']) || !empty($data['filter_tag'])) { $sql .= " AND ("; if (!empty($data['filter_name'])) { $implode = array(); $words = explode(' ', trim(preg_replace('/\s\s+/', ' ', $data['filter_name']))); foreach ($words as $word) { if (!empty($data['filter_description'])) { $implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'"; } else { $implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'"; } } if ($implode) { $sql .= " " . implode(" OR ", $implode) . ""; } } if (!empty($data['filter_name']) && !empty($data['filter_tag'])) { $sql .= " OR "; } if (!empty($data['filter_tag'])) { $implode = array(); $words = explode(' ', trim(preg_replace('/\s\s+/', ' ', $data['filter_tag']))); foreach ($words as $word) { $implode[] = "LCASE(pt.tag) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'"; } if ($implode) { $sql .= " " . implode(" OR ", $implode) . " AND pt.language_id = '" . (int)$this->config->get('config_language_id') . "'"; } } $sql .= ")"; } if (!empty($data['filter_category_id'])) { if (!empty($data['filter_sub_category'])) { $implode_data = array(); $implode_data[] = "p2c.category_id = '" . (int)$data['filter_category_id'] . "'"; $this->load->model('catalog/category'); $categories = $this->model_catalog_category->getCategoriesByParentId($data['filter_category_id']); foreach ($categories as $category_id) { $implode_data[] = "p2c.category_id = '" . (int)$category_id . "'"; } $sql .= " AND (" . implode(' OR ', $implode_data) . ")"; } else { $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'"; } } if (!empty($data['filter_manufacturer_id'])) { $sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'"; } $sql .= " GROUP BY p.product_id"; $sort_data = array( 'pd.name', 'p.model', 'p.quantity', 'p.price', 'rating', 'p.sort_order', 'p.date_added' ); /* Old. Original if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY LCASE(" . $data['sort'] . ")"; } else { $sql .= " ORDER BY " . $data['sort']; } } else { $sql .= " ORDER BY p.sort_order"; } Old. Original */ // Sorting by price with special and discount if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } // Sorting by price with special and discount if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC, LCASE(pd.name) DESC"; } else { $sql .= " ASC, LCASE(pd.name) ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $product_data = array(); $query = $this->db->query($sql); foreach ($query->rows as $result) { $product_data[$result['product_id']] = $this->getProduct($result['product_id']); } $this->cache->set('product.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache, $product_data); } return $product_data; } Надіслати Поділитися на інших сайтах More sharing options... deim Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 Пригрожу пальчиком: почему код под спойлер не убрали? Огромное же полотно текста, читать и перематывать неудобно. Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Спасибо. Подправил Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: - с сортировкой части товаров по "finalprice ASC WHERE finalprice > 0" - и оставшейся частью товаров "WHERE finalprice = 0" (где `finalprice` -- это одна из трёх цен, price/special/discount; схема их использования есть в приведенном коде). Поэтому малой кровью, вмешавшись лишь в одно место сборки длинного запроса, эту проблему не решить. Скорей всего придётся дублировать кучу кода для этого исключительного случая. А это проблемы с дальнейшим развитием и обслуживанием этого куска, а также скорей всего проблемы для вкумодов (если и найдут нужный кусок - модифицируют его всего в одном месте этой функции). Хотя надо посмотреть: может быть не будет проблемой просто добавить в существующих код условие про цену больше нуля, а оставшиеся "нулевые" товары прицеплять в конце? Если такое упрощение прокатит, можно было бы в самом конце ф-ции формировать финальный запрос, не изменяя значительно весь код и не дублируя эту простыню. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 order by price = 0, price DESC Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: rb2, спасибо за ответ. Вариант с Union рассматривался, но пока отложился по таким же причинам трудоёмкости. Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 order by price = 0, price Гуглить я тоже умею :-) . В боевых условиях пробовал конкретно на этом запросе? Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 код с рабочего магазина. а в чем проблема? Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Ну, наверное, в том, что этот вариант не работает в общем случае для указанного кода Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Товары с "нулевой" ценой в конце списка Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
deim Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 Пригрожу пальчиком: почему код под спойлер не убрали? Огромное же полотно текста, читать и перематывать неудобно. Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Спасибо. Подправил Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: - с сортировкой части товаров по "finalprice ASC WHERE finalprice > 0" - и оставшейся частью товаров "WHERE finalprice = 0" (где `finalprice` -- это одна из трёх цен, price/special/discount; схема их использования есть в приведенном коде). Поэтому малой кровью, вмешавшись лишь в одно место сборки длинного запроса, эту проблему не решить. Скорей всего придётся дублировать кучу кода для этого исключительного случая. А это проблемы с дальнейшим развитием и обслуживанием этого куска, а также скорей всего проблемы для вкумодов (если и найдут нужный кусок - модифицируют его всего в одном месте этой функции). Хотя надо посмотреть: может быть не будет проблемой просто добавить в существующих код условие про цену больше нуля, а оставшиеся "нулевые" товары прицеплять в конце? Если такое упрощение прокатит, можно было бы в самом конце ф-ции формировать финальный запрос, не изменяя значительно весь код и не дублируя эту простыню. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 order by price = 0, price DESC Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: rb2, спасибо за ответ. Вариант с Union рассматривался, но пока отложился по таким же причинам трудоёмкости. Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 order by price = 0, price Гуглить я тоже умею :-) . В боевых условиях пробовал конкретно на этом запросе? Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 код с рабочего магазина. а в чем проблема? Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Ну, наверное, в том, что этот вариант не работает в общем случае для указанного кода Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Товары с "нулевой" ценой в конце списка Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Спасибо. Подправил Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: - с сортировкой части товаров по "finalprice ASC WHERE finalprice > 0" - и оставшейся частью товаров "WHERE finalprice = 0" (где `finalprice` -- это одна из трёх цен, price/special/discount; схема их использования есть в приведенном коде). Поэтому малой кровью, вмешавшись лишь в одно место сборки длинного запроса, эту проблему не решить. Скорей всего придётся дублировать кучу кода для этого исключительного случая. А это проблемы с дальнейшим развитием и обслуживанием этого куска, а также скорей всего проблемы для вкумодов (если и найдут нужный кусок - модифицируют его всего в одном месте этой функции). Хотя надо посмотреть: может быть не будет проблемой просто добавить в существующих код условие про цену больше нуля, а оставшиеся "нулевые" товары прицеплять в конце? Если такое упрощение прокатит, можно было бы в самом конце ф-ции формировать финальный запрос, не изменяя значительно весь код и не дублируя эту простыню. Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 order by price = 0, price DESC Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: rb2, спасибо за ответ. Вариант с Union рассматривался, но пока отложился по таким же причинам трудоёмкости. Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 order by price = 0, price Гуглить я тоже умею :-) . В боевых условиях пробовал конкретно на этом запросе? Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 код с рабочего магазина. а в чем проблема? Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Ну, наверное, в том, что этот вариант не работает в общем случае для указанного кода Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Товары с "нулевой" ценой в конце списка Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
rb2 Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: - с сортировкой части товаров по "finalprice ASC WHERE finalprice > 0" - и оставшейся частью товаров "WHERE finalprice = 0" (где `finalprice` -- это одна из трёх цен, price/special/discount; схема их использования есть в приведенном коде). Поэтому малой кровью, вмешавшись лишь в одно место сборки длинного запроса, эту проблему не решить. Скорей всего придётся дублировать кучу кода для этого исключительного случая. А это проблемы с дальнейшим развитием и обслуживанием этого куска, а также скорей всего проблемы для вкумодов (если и найдут нужный кусок - модифицируют его всего в одном месте этой функции). Хотя надо посмотреть: может быть не будет проблемой просто добавить в существующих код условие про цену больше нуля, а оставшиеся "нулевые" товары прицеплять в конце? Если такое упрощение прокатит, можно было бы в самом конце ф-ции формировать финальный запрос, не изменяя значительно весь код и не дублируя эту простыню. Надіслати Поділитися на інших сайтах More sharing options...
freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 order by price = 0, price DESC Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: rb2, спасибо за ответ. Вариант с Union рассматривался, но пока отложился по таким же причинам трудоёмкости. Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 order by price = 0, price Гуглить я тоже умею :-) . В боевых условиях пробовал конкретно на этом запросе? Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 код с рабочего магазина. а в чем проблема? Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Ну, наверное, в том, что этот вариант не работает в общем случае для указанного кода Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Товары с "нулевой" ценой в конце списка Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Чтобы решить исходную задачу, надо сделать UNION результатов двух запросов: rb2, спасибо за ответ. Вариант с Union рассматривался, но пока отложился по таким же причинам трудоёмкости. Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 order by price = 0, price Гуглить я тоже умею :-) . В боевых условиях пробовал конкретно на этом запросе? Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 код с рабочего магазина. а в чем проблема? Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Ну, наверное, в том, что этот вариант не работает в общем случае для указанного кода Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Товары с "нулевой" ценой в конце списка Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 order by price = 0, price Гуглить я тоже умею :-) . В боевых условиях пробовал конкретно на этом запросе? Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 код с рабочего магазина. а в чем проблема? Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Ну, наверное, в том, что этот вариант не работает в общем случае для указанного кода Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Товары с "нулевой" ценой в конце списка Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
freelancer Опубліковано: 12 жовтня 2013 Share Опубліковано: 12 жовтня 2013 код с рабочего магазина. а в чем проблема? Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Ну, наверное, в том, что этот вариант не работает в общем случае для указанного кода Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Товары с "нулевой" ценой в конце списка Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV
JohnnyVega Опубліковано: 12 жовтня 2013 Автор Share Опубліковано: 12 жовтня 2013 Ну, наверное, в том, что этот вариант не работает в общем случае для указанного кода Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Товары с "нулевой" ценой в конце списка
JohnnyVega Опубліковано: 14 жовтня 2013 Автор Share Опубліковано: 14 жовтня 2013 апну тему. Надіслати Поділитися на інших сайтах More sharing options... 4 years later... sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
sergei5770 Опубліковано: 26 січня 2018 Share Опубліковано: 26 січня 2018 Не удалось решить вопрос? Надіслати Поділитися на інших сайтах More sharing options... 3 months later... AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options... 1 year later... sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options... 4 months later... ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
AirDemon Опубліковано: 23 травня 2018 Share Опубліковано: 23 травня 2018 Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } 2 Надіслати Поділитися на інших сайтах More sharing options...
sempey Опубліковано: 24 січня 2020 Share Опубліковано: 24 січня 2020 А это работает для ocStore 2.3? сам попробовал, что то не хочет... В 23.05.2018 в 20:46, AirDemon сказал: Файл catalog/model/catalog/product.php, метод getProducts(), строка 166 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } заменить if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } Надіслати Поділитися на інших сайтах More sharing options...
ReyUA Опубліковано: 17 червня 2020 Share Опубліковано: 17 червня 2020 Нашел решение здесь: https://oc-new.com/uroki-po-opencart/tovary-s-nulevoj-cenoj-v-konce-spiska.html В ocstore 2.1 примерно строка 160 метод getProducts(), ocstore 2.3 примерно строка 169 метод getProducts() catalog/model/catalog/product.php Находим код: if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 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']; } } else { $sql .= " ORDER BY p.sort_order"; } и меняем его на следующий if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY IF(p.price = '0', 1, 0), (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), " . $data['sort']; } } else { $sql .= " ORDER BY IF(p.price = '0', 1, 0), p.sort_order"; } P.S. На моем OC 2.3 работает отлично. 1 Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts