Категории
OpenCart вывести товар с минимальной, максимальной ценой, популярный и новый - Блог Geniustudio.net
OpenCart

OpenCart вывести товар с минимальной, максимальной ценой, популярный и новый

04.12.2024

Часто бывает потребность для лучшего продвижения интернет магазина выводить в описании категории таблицу ( список ) товаров. Данный список состоит из самого дорогого товара, самого дешевого, нового и популярного товара. Для реализации данного функционала можно обойтись без модулей, просто создав дополнительные запросы в модели, обработав данные в контроллере и вывести это все в шаблоне.

Товар с минимальной ценой

Для начала создадим дополнительную функцию в модели категории с запросом, которая будет доставать товар с минимальной ценой.

 
public function getProductWithMinPrice($category_id){
        $query = $this->db->query("SELECT pd.name, IFNULL(ps.price,p.price) AS curent_price, p.*
                                    FROM " . DB_PREFIX . "product p
                                    INNER JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)
                                    INNER JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)
                                    LEFT JOIN `" . DB_PREFIX . "product_special` ps ON (ps.product_id = p.product_id) 
                                    AND (ps.date_start <= CURDATE() AND (ps.date_end <=CURDATE() OR ps.date_end = '0000-00-00'))
                                    WHERE p2c.category_id = '". (int) $category_id ."' AND p.status = '1' AND p.quantity > 0 AND  pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
                                    ORDER BY curent_price ASC LIMIT 0,1 ");
        return $query->row;
    }

После добавления этой функции необходимо в котроллере категории вызвать данную функцию и передать в шаблон.


//Достаем текущую категорию 
$parts = explode('_', (string)$this->request->get['path']);
            
            $category_id = (int)array_pop($parts);
            
// вызываем метод с модели 
 $prodWithMinPrice = $this->model_catalog_category->getProductWithMinPrice($category_id);

// передаем данные на шаблон 
 $data['minPriceName'] = $prodWithMinPrice['name'];
            $data['minPriceLink'] = $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $prodWithMinPrice['product_id']);

В шаблоне ( category.tpl ) необходимо просто вывести переменные $minPriceName and $minPriceLink на экран. Таким образом у вас отобразится название товара и ссылка на него. Для отображения цены товара необходимо добавить в контроллере проверку на скидку


            if(empty($prodWithMinPrice['curent_price'])){
                $data['minPriceValue'] = $prodWithMinPrice['price'];
            }else { 
                $data['minPriceValue'] = $prodWithMinPrice['curent_price'];
            }

В файле category.tpl вывести $minPriceValue для отображения цены.

Товар с максимальной ценой

Для вывода товара с максимальной ценой необходимо выполнить такие же действия,  только в модели прописать другую функцию и новый запрос


public function getProductWithMaxPrice($category_id){
        
        $query = $this->db->query("SELECT pd.name, IFNULL(ps.price,p.price) AS curent_price, p.*
                    FROM " . DB_PREFIX . "product p
                    INNER JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)
                    INNER JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)
                    LEFT JOIN `" . DB_PREFIX . "product_special` ps ON (ps.product_id = p.product_id)
                    AND (ps.date_start <= CURDATE() AND (ps.date_end <=CURDATE() OR ps.date_end = '0000-00-00'))
                    WHERE p2c.category_id = '". (int) $category_id ."'  AND p.status = '1' AND p.quantity > 0 AND  pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
                    ORDER BY curent_price DESC LIMIT 0,1 ");
       
       
        return $query->row;
        
    }

Самый популярный товар


public function getProductWithMaxReviewed($category_id){
        
        $query = $this->db->query("SELECT p.*, pd.name
                                    FROM " . DB_PREFIX . "product p
                                    INNER JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)
                                    INNER JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)
                                    WHERE p2c.category_id = '". (int) $category_id ."' 
                                    AND p.status = '1'  AND p.quantity > 0
                                    AND  pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
                                    ORDER BY p.viewed DESC LIMIT 0,1"
                                    );
        return $query->row;
        
    }

Самый новый товар


 public function getProductNew($category_id){
        
        $query = $this->db->query("SELECT pd.name, p.`date_added`, p.*
                                    FROM " . DB_PREFIX . "product p
                                    INNER JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)
                                    INNER JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)
                                    WHERE p2c.category_id = '". (int) $category_id ."' AND p.status = '1' AND p.quantity > 0 AND  pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
                                    ORDER BY p.`date_added` DESC LIMIT 0,1
                                    ");
        
        
        return $query->row;
        
    }

Готовый модуль

Данные наработки мы упаковали в модуль. Если вам необходимо на сайте вывести таблицу со списком товаров ( самый дорогой, дешевый, популярный и новый товар ) то вы можете обратиться к нам в телеграмм. Мы поможем с установкой и доработкой модуля под ваш интернет-магазин.