Остро встал вопрос сортировки по размеру скидок, может кто-нибудь встречался с проблемой? Необходимо реализовать в выборке сортировки дополнительную опцию "сортировать по размеру скидок" При этом есть еще вопрос, можно ли реализовать скидки в процентном соотношение или нет?
Начнем так. 1. В файле \catalog\model\catalog\product.php в запросе который в функции public function getProducts($data = array()) { добавим после AS discount, Код: (SELECT ((p.price - ps.price) / (p.price / 100)) 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_percent, В итоге теперь запрос нам выдаст доп колонку с процентом скидки 2. Ниже по коду после 'p.date_added', добавим 'special_percent' 3. После кода Код: $data['sorts'][] = array( 'text' => $this->language->get('text_model_desc'), 'value' => 'p.model-DESC', 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=DESC' . $url) ); вставим PHP: $data['sorts'][] = array( 'text' => $this->language->get('text_percent_asc'), 'value' => 'special_percent-DESC', 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=special_percent&order=ASC' . $url) ); $data['sorts'][] = array( 'text' => $this->language->get('text_percent_desc'), 'value' => 'special_percent-DESC', 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=special_percent&order=DESC' . $url) ); 4. В языковом файле catalog\language\russian\product\category.php вставим PHP: $_['text_percent_asc'] = 'Скидка (низкая > высокая)';$_['text_percent_desc'] = 'Скидка (высокая > низкая)'; На этом, все!!
Спасибо, конечно, не все понятно, но попробую. Еще только один вопрос к какой версии ваш код писался?
пока просто проверяйте. Если сортирует в 3-м пункте как надо, то уже почти все сделано. Допишу завтра инструкцию.
По сути она работает не по скидкам а по акциям) То что надо получилось, сейчас буду думать, как выводить тока те товары, которые имеют акцию... Громаднейшее спасибо!
версия 2.0.1.1 - пытался но не получилось нашел и добавил как в п.1, п.2 и п.4 но кода в п.3 $data['sorts'][] = array( 'text' => $this->language->get('text_model_desc'), 'value' => 'p.model-DESC', 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=DESC' . $url) ); в файле \catalog\model\catalog\product.php этого не нашел ((( поискав в файлах движка нашел его в файле \catalog\controller\product\category.php добавил но ничего не дало (((
Спасибо автору идеи! Только там в коде ДВА раза повторяется 'value' => 'special_percent-DESC', нужно чтобы и 'value' => 'special_percent-ASC', тоже было Код: $data['sorts'][] = array( 'text' => $this->language->get('text_percent_asc'), 'value' => 'special_percent-ASC', 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=special_percent&order=ASC' . $url) ); $data['sorts'][] = array( 'text' => $this->language->get('text_percent_desc'), 'value' => 'special_percent-DESC', 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=special_percent&order=DESC' . $url) );
Данное решение работатет в категориях. Знатоки, подскажите пожалусто как можно сделать тоже самое на странице акций - specials? Нужно и на следующих страницах: новинки, популярные товары, самые продающиеся товары, итп... Буду очень признателен.
Есть еще момент, при таком подходе вы увеличиваете нагрузку, добавляя лишний ненужный подзапрос (см п.2). 1. Если нужна такая сортировка, то нужно Код: (SELECT ((p.price - ps.price) / (p.price / 100)) 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_percent, заменить на Код: (!empty($data['sort'] && $data['sort'] == 'special_percent')? (SELECT ((p.price - ps.price) / (p.price / 100)) 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_percent : '' , Пишу с листа без проверки - желающие могут сами.. 2..Можно все и без подзапроса до кода Код: if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { Вставить Код: if ($data['sort'] == 'special_percent') { $sql .= " ORDER BY ((p.price - ps.price) / (p.price / 100)) } else Проверяйте.