Хотите работать с нами?

    photo
    OpenCart

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

    07.07.2023 0

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

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

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

     
    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;
            
        }
    

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

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

    Click on a star to rate it!

    Average rating 0 / 5. Vote count: 0

    No votes so far! Be the first to rate this post.

    Коментарі

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *