Добрый день! Подскажите пожалуйста как сделать так что б в модулях «Новые поступления» и «Лидеры продаж» выводились товары только из определенных категорий или же проще не выводить товар который не относиться ни к какой категории?
меня тоже интересует. Есть частично тут. Но на Лидеры продаж не работает. Видел модуль за 300 рулб. Кстати буду признателен если у кого то есть.
Получилось для OpenCart 1.5.1.3. Криво правда, но работает. И так для «Новые поступления» catalog/controller/module/latest.php перед Код: protected function index($setting) { добавляем Код: private function _endc( $array ) { return end( $array ); } потом, перед Код: $results = $this->model_catalog_product->getProducts($data); вставляем: Код: if ((isset($this->request->get['route'])) AND ($this->request->get['route'] == 'product/category')) { $category_id = $this->_endc(explode('_', (string)$this->request->get['path'])); $data['filter_category_id'] = $category_id; $data['filter_sub_category'] = TRUE; } Для «Лидеры продаж» catalog/model/catalog/product.php Полностью заменить public function getBestSellerProducts($limit) {...} На Код: public function getBestSellerProducts($limit) { $result = ''; $parts = explode('_', (string)$this->request->get['path']); $sss = end($parts); $product_data = $this->cache->get('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$limit . '.' . $sss); if (!$product_data) { $query = $this->db->query("SELECT op.product_id, COUNT(*) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p2c.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW() AND p2c.category_id = $sss AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$limit); foreach ($query->rows as $result) { $product_data[$result['product_id']] = $this->getProduct($result['product_id']); } if (!$result) { $query = $this->db->query("SELECT op.product_id, COUNT(*) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p2c.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$limit); foreach ($query->rows as $result) { $product_data[$result['product_id']] = $this->getProduct($result['product_id']); } } $this->cache->set('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$limit . '.' . $sss, $product_data); } return $product_data; } Уверен что сделано не ровно, но работает. Если кто поможет оптимизировать, сделать код лучше, буду рад. исправил то, что не правильно написал выше. МОДЕРАТОР исправьте, у меня такой возможности нет. что касается «Новые поступления» все по прежнему. переделал «Лидеры продаж»: catalog/controller/module/bestseller.php перед Код: protected function index($setting) { вставить Код: private function _endc( $array ) { return end( $array ); } строку Код: $results = $this->model_catalog_product->getBestSellerProducts($setting['limit']); заменить на Код: $data = array( 'limit' => $setting['limit'], ); if ((isset($this->request->get['route'])) AND ($this->request->get['route'] == 'product/category') OR ($this->request->get['route'] == 'product/product')) { $category_id = $this->_endc(explode('_', (string)$this->request->get['path'])); $data['filter_category_id'] = $category_id; $data['filter_sub_category'] = TRUE; } $results = $this->model_catalog_product->getBestSellerProducts($data); catalog/model/catalog/product.php Полностью заменить public function getBestSellerProducts($limit) {...} На Код: public function getBestSellerProducts($data = array()) { $product_data = $this->cache->get('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$data['limit'] . '.' . $data['filter_category_id']); if (!$product_data) { $sql = "SELECT op.product_id, COUNT(*) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p2c.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW()"; 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'] . "'"; } } $sql .= " AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$data['limit']; $query = $this->db->query($sql); foreach ($query->rows as $result) { $product_data[$result['product_id']] = $this->getProduct($result['product_id']); } $this->cache->set('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$data['limit'] . '.' . $data['filter_category_id'], $product_data); } return $product_data; } Вроде так. Точно работает на странице товара и категории. Не уверен на счет прочих, но дописать можно.