Бажаєте працювати з нами?

    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 для відображення ціни.

    Товар із максимальною ціною

    Для виведення товару з максимальною ціною необхідно виконати такі ж дії, nbsp; тільки в моделі прописати іншу функцію та новий запит

    
    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.

    Коментарі

    Залишити відповідь

    Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *