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

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

04.12.2024

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

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

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

<!-- wp:html -->
<pre><code class="language-php"> 
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;
    }
</code></pre>
<!-- /wp:html -->

 

Після додавання цієї функції необхідно в контролері категорії викликати цю функцію і передати в шаблон.

 

<pre><code class="language-php">
//Дістаємо поточну категорію
$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']);
</code></pre>

 

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

<!-- wp:html -->
<pre><code class="language-php">
            if(empty($prodWithMinPrice['curent_price'])){
                $data['minPriceValue'] = $prodWithMinPrice['price'];
            }else { 
                $data['minPriceValue'] = $prodWithMinPrice['curent_price'];
            }
</code></pre>
<!-- /wp:html -->

 

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

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

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

<pre><code class="language-php">
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;
        
    }
</code></pre>

 

Найпопулярніший товар


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

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

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